1

注意:没有必要使用批处理,但我只是熟悉批处理,我想Powershell会更好,所以如果powershell中有更简单的解决方案,请大声疾呼!

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

基本上我的问题是:

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

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

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

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

这可以批量吗?

谢谢!

4

2 回答 2

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:将前四个token分配给参数%%f通过%%i(第一个参数是for语句中给出的那个)
  • dir /b *_*_*_*: 列出名称至少包含 3 个下划线的所有文件及其文件名(此命令的输出由for循环处理)
  • setlocal EnableDelayedExpansion:在运行时扩展变量(否则将参数分配给变量将不起作用)

有关详细信息,请参阅help forhelp dir

于 2012-11-15T20:39:13.587 回答
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 脚本名

于 2012-11-15T19:36:07.837 回答