3

所以,我想使用批处理脚本从卷影副本中进行备份。这就是我到目前为止所拥有的:

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 返回的最后一行中的路径,但我真的不知道我将如何完成它。

在获取路径并\在末尾添加 a 之后(如果路径以 a 结尾,它只会创建符号链接\)创建一个符号链接到它。

mklink c:\shadowcopy /d %path%

所以,我迷失在它的中间。

我找到了这个问题的答案:

批处理文件以输出 findstr 的最后一行

但是伙计,批处理语法是一团糟,我不理解答案中的一行代码以使其适应我的项目。

有人可以帮助我并详细解释我需要做什么(或代码,如果你提供的话),这样我就可以理解我在做什么,而不仅仅是粘贴和复制,谁知道呢,做一些改进/更改。

4

1 回答 1

3

每当您想捕获命令的输出时,请使用for /f. 我建议?在这种情况下这将是一个方便的分隔符。

此代码段将为所有卷影副本创建链接。

if not exist c:\shadowcopy md c:\shadowcopy
for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do (
    mklink /d c:\shadowcopy\%%~nxI \\?%%I\
)

此片段将从影子列表的最终匹配行创建单个链接。

for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do (
    set "target=\\?%%I\"
)
mklink /d c:\shadowcopy %target%

看到不同?在第一个代码块中,在循环mklink的每次迭代中触发for /f并创建许多符号链接;而在第二个块中,set覆盖%target%每次迭代中存储的值。在循环之外mklink运行,因此只创建一个符号链接。我想这就是你要找的秘方。

在 cmd 控制台中,输入help for有关for /f循环的更多信息。

于 2015-11-19T12:44:46.487 回答