batch file/ Powershell – 枚举文件夹中的文件

注:没有必要使用批量说,但我只是熟悉批处理,Powershell会更好,我想象,所以如果有更容易的解决scheme,在PowerShell的这个问题,请大喊!

我为testing所有客户端的灾难恢复备份,即安装ShadowProtect快照最新增量,写入和读取文件,卸载映像等任务艰巨。 批量的实际ShadowProtect部分是相当简单的,但我想devise一个批处理,可以自动执行此操作。

基本上我的问题是:

如何在batch file中,我可以首先枚举文件夹中的文件,然后将给定文件名的特定部分放入一个variables?

原因是ShadowProtect增量有一个命名约定,如:

SERVERNAME_DRIVELETTER_b00X_i000x - whereby b = base image, i = incremental number 

我需要安装最新的增量映像,因此需要parsing文件夹并根据文件名后面的数字find最新的增量映像。

这是可能的批量?

谢谢!

像这样的东西应该工作:

 @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 forhelp dir

你总是可以使用vbscript或jscript。 它比批处理文件强大得多。 此外jscript和VBScript主机也可以在没有PowerShell的机器上使用!

链接枚举: http : //www.techimo.com/forum/webmastering-programming/100453-recursive-javascript-list-all-files-folders-given-folder.html

Jscript字符串参考: http : //msdn.microsoft.com/en-us/library/bxsyt3yc( v=vs.80) .aspx

你应该能够把两者结合起来。

你运行你的jscript(我喜欢jscript vbscript,因为它的JavaScript相似)

cscript脚本名称