从影子副本备份

所以,我想使用批处理脚本从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循环的更多信息。