从卷影副本备份
Backup from 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返回的最后一行中的路径,但我真的不知道如何完成它。
并且在获取路径并在末尾添加一个\
(如果路径以\
结尾,它只会使符号link)使符号link 到它。
mklink c:\shadowcopy /d %path%
所以,我在其中迷路了。
我找到了这个问题的答案:
Batch file to output last line of findstr
但是伙计,批处理语法一团糟,我不理解答案中的一行代码以使其适应我的项目。
有人可以帮助我并详细解释我需要做什么(或代码,如果你提供的话)这样我就可以理解我在做什么而不是仅仅粘贴和复制,谁知道呢,做一些improvements/changes.
只要您想捕获命令的输出,请使用 for /f
。我建议 ?
在这种情况下是一个方便的分隔符。
此代码段将为所有卷影副本创建 links。
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\
)
此代码段将从影子列表的最后匹配行创建一个 link。
for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do (
set "target=\?%%I\"
)
mklink /d c:\shadowcopy %target%
看出区别了吗?在第一个代码块中,mklink
在 for /f
循环的每次迭代中触发并创建许多 symlink;而在第二个块中,set
会在每次迭代时覆盖存储在 %target%
中的值。 mklink
在 循环外 运行,因此只创建一个 symlink。我想这就是您正在寻找的秘诀。
在 cmd 控制台中,输入 help for
以获取有关 for /f
循环的更多信息。
所以,我想使用批处理脚本从卷影副本进行备份。这就是我到目前为止所拥有的:
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返回的最后一行中的路径,但我真的不知道如何完成它。
并且在获取路径并在末尾添加一个\
(如果路径以\
结尾,它只会使符号link)使符号link 到它。
mklink c:\shadowcopy /d %path%
所以,我在其中迷路了。
我找到了这个问题的答案:
Batch file to output last line of findstr
但是伙计,批处理语法一团糟,我不理解答案中的一行代码以使其适应我的项目。
有人可以帮助我并详细解释我需要做什么(或代码,如果你提供的话)这样我就可以理解我在做什么而不是仅仅粘贴和复制,谁知道呢,做一些improvements/changes.
只要您想捕获命令的输出,请使用 for /f
。我建议 ?
在这种情况下是一个方便的分隔符。
此代码段将为所有卷影副本创建 links。
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\
)
此代码段将从影子列表的最后匹配行创建一个 link。
for /f "tokens=2 delims=?" %%I in ('vssadmin list shadows ^| find "GLOBALROOT"') do (
set "target=\?%%I\"
)
mklink /d c:\shadowcopy %target%
看出区别了吗?在第一个代码块中,mklink
在 for /f
循环的每次迭代中触发并创建许多 symlink;而在第二个块中,set
会在每次迭代时覆盖存储在 %target%
中的值。 mklink
在 循环外 运行,因此只创建一个 symlink。我想这就是您正在寻找的秘诀。
在 cmd 控制台中,输入 help for
以获取有关 for /f
循环的更多信息。