注意:没有必要按批次使用批处理,但我只熟悉批处理,Powershell会更好我想象,所以如果在PowerShell中有更简单的解决方案,请大声喊叫!
我为所有客户测试DR备份的艰巨任务,即安装ShadowProtect Snapshots最新增量,写入和读取文件,卸载映像。批处理的实际ShadowProtect部分相当简单,但我想设计一个可以自动执行此操作的批处理。
基本上我的问题是:
如何在批处理文件中首先枚举文件夹中的文件,然后将给定文件名的特定部分放入变量中?
ShadowProtect增量的原因有一个命名约定,如:
SERVERNAME_DRIVELETTER_b00X_i000x - whereby b = base image, i = incremental number
我需要安装最新的增量映像,因此需要根据文件名中i
之后的数字来解析文件夹并找到最新的增量映像。
这可以批量生产吗?
谢谢!
答案 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 for
和help dir
。
答案 1 :(得分:0)
您可以随时使用vbscript或jscript。它比批处理文件强大得多。此外,jscript和vbscript主机也可以在没有powershell的机器上使用!
Jscript字符串参考: http://msdn.microsoft.com/en-us/library/bxsyt3yc(v=vs.80).aspx
你应该能够将两者结合起来。
你运行你的jscript(我更喜欢jscript到vbscript,因为它与javascript相似)
cscript scriptname