批处理文件/ Powershell - 枚举文件夹中的文件

时间:2012-11-15 19:28:11

标签: windows batch-file cmd directory enumeration

注意:没有必要按批次使用批处理,但我只熟悉批处理,Powershell会更好我想象,所以如果在PowerShell中有更简单的解决方案,请大声喊叫!

我为所有客户测试DR备份的艰巨任务,即安装ShadowProtect Snapshots最新增量,写入和读取文件,卸载映像。批处理的实际ShadowProtect部分相当简单,但我想设计一个可以自动执行此操作的批处理。

基本上我的问题是:

如何在批处理文件中首先枚举文件夹中的文件,然后将给定文件名的特定部分放入变量中?

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

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

我需要安装最新的增量映像,因此需要根据文件名中i之后的数字来解析文件夹并找到最新的增量映像。

这可以批量生产吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

@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

答案 1 :(得分:0)

您可以随时使用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 scriptname