所以,我想使用批处理脚本从shadow-copy进行备份。 这是我迄今为止:
vssadmin list shadows | findstr /C:"Volume da Cópia de Sombra"
输出:
Volume da Cópia de Sombra: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1 Volume da Cópia de Sombra: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2 Volume da Cópia de Sombra: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5
我只需要得到由findstr返回的最后一行的path,但我真的不知道我将如何完成它。
在获得path并添加一个\
到最后(它只会使符号链接,如果path以\
结尾)做一个符号链接到它。
mklink c:\shadowcopy /d %path%
所以,我迷失了。
我发现这个问题的答案是:
batch file输出findstr的最后一行
但是,人的批处理语法是一团糟,我不明白答案中的一行代码,以适应我的项目。
有人可以帮助我,详细解释我需要做什么(或代码,如果你提供的话),这样我就可以理解我在做什么,而不是只是粘贴和复制,谁知道做一些改进。
每当你想捕获一个命令的输出, for /f
。 我建议?
在这种情况下将是一个方便的分隔符。
这段代码将创建所有影子副本的链接。
if not exist c:\shadowcopy md c:\shadowcopy for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do ( mklink /dc:\shadowcopy\%%~nxI \\?%%I\ )
这段代码会从阴影列表的最后匹配线创建单个链接。
for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do ( set "target=\\?%%I\" ) mklink /dc:\shadowcopy %target%
看到不同? 在第一个代码块中, mklink
会在for /f
循环的每一次迭代中触发并创建许多符号链接; 而在第二个块中, set
覆盖每次迭代中存储在%target%
的值。 mklink
在循环之外运行,因此只创建一个符号链接。 这是你想要的秘密。
在cmd控制台中,输入help for
获取有关for /f
循环的更多信息。