[英]Batch File/Powershell - enumerating files in a folder
注意:不必每句话都使用批处理,但我只是熟悉批处理,我想Powershell会更好,因此,如果在Powershell中有解决此问题的简便方法,请大喊大叫!
我的艰巨任务是为所有客户端测试灾难恢复备份,即安装ShadowProtect Snapshots最新增量文件,写入和读取文件,然后卸载映像。 批处理的实际ShadowProtect部分相当简单,但我想设计一个可以自动执行此操作的批处理。
本质上我的问题是:
我如何首先在批处理文件中枚举文件夹中的文件,然后将给定文件名的特定部分放入变量中?
之所以成为ShadowProtect增量产品,是因为其命名约定如下:
SERVERNAME_DRIVELETTER_b00X_i000x - whereby b = base image, i = incremental number
我需要挂载最新的增量映像,因此需要基于文件名中i
后面的数字来分析文件夹并查找最新的增量映像。
可以批量吗?
谢谢!
这样的事情应该起作用:
@echo off
setlocal EnableDelayedExpansion
for /f "delims=_ tokens=1-4" %%f in ('dir /b *_*_*_*') do (
set servername=%%f
set driveletter=%%g
set base_image=%%h
set increment=%%i
)
echo !servername!
echo !driveletter!
echo !base_image!
echo !increment!
endlocal
如果您有多个匹配文件,并且想对所有文件进行处理,则需要将处理代码放入循环中。
编辑:
for /f
:处理文件或单引号引起的命令输出 delims=_
:已处理内容中的字段用下划线分隔 tokens=1-4
:将前四个令牌分配给参数%%f
至%%i
(第一个参数是for
语句中给定的参数) dir /b *_*_*_*
:列出名称至少包含3个下划线的所有文件及其文件名(此命令的输出由for
循环处理) setlocal EnableDelayedExpansion
:在运行时扩展变量(否则将参数分配给变量将不起作用) 有关更多详细信息,请参见help for
和help dir
。
您可以始终使用vbscript或jscript。 它比批处理文件功能强大得多。 在没有Powershell的机器上也可以使用jscript和vbscript主机!
枚举链接: http : //www.techimo.com/forum/webmastering-programming/100453-recursive-javascript-list-all-files-folders-given-folder.html
Jscript字符串参考: http : //msdn.microsoft.com/zh-cn/library/bxsyt3yc( v=vs.80) .aspx
您应该能够将两者结合起来。
您运行自己的jscript(由于与JavaScript类似,我更喜欢jscript而不是vbscript)
cscript脚本名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.