Batch file Can';t在CMD中使用for/f获取要设置的变量
这个剧本把我难住了。我正在尝试编写一个脚本,它接受最新的shadowcopy dir并将其放在一个var中。这就是我到目前为止所拥有的Batch file Can';t在CMD中使用for/f获取要设置的变量,batch-file,for-loop,cmd,Batch File,For Loop,Cmd,这个剧本把我难住了。我正在尝试编写一个脚本,它接受最新的shadowcopy dir并将其放在一个var中。这就是我到目前为止所拥有的 @ECHO off set ShadowDir= vssadmin list shadows|for /f "tokens=4 delims=: " %%A IN ('FINDSTR "GLOBALROOT"') do set ShadowDir=%%A ECHO The dir is %ShadowDir% pause 这就是输出 C:\WINDOWS\sy
@ECHO off
set ShadowDir=
vssadmin list shadows|for /f "tokens=4 delims=: " %%A IN ('FINDSTR "GLOBALROOT"') do set ShadowDir=%%A
ECHO The dir is %ShadowDir%
pause
这就是输出
C:\WINDOWS\system32>set ShadowDir=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy14
C:\WINDOWS\system32>set ShadowDir=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy15
C:\WINDOWS\system32>set ShadowDir=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy16
C:\WINDOWS\system32>set ShadowDir=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy17
C:\WINDOWS\system32>set ShadowDir=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy18
The dir is
Press any key to continue . . .
正如您所看到的,它正在正确解析并提供所需的输出。但是ShadowDir变量仍然为空,即使发出set命令
知道发生了什么吗?我会用
for /f "tokens=4 delims=: " %%A IN ('vssadmin list shadows^|FINDSTR "GLOBALROOT"') do set ShadowDir=%%A
将
vssadmin
输出传递到有效的findstr
!谢谢,但出于好奇,你能解释一下原因吗?输出是按我的方式进行管道传输的,但变量仍然为空。因为管道导致管道两侧的进程分别在单独的cmd.exe会话中运行,所以这也不起作用:echo value | set/P var=
。有关更多详细信息,请参阅我相信您正在将vssadin
命令输出到For
——但是For
正在接受来自findstr
的输入。findstr
没有输入,因此它向for
发送了一条错误消息,并且该错误消息没有使用:
作为分隔符的第四个标记。因此,通过将vssadmin
移动到要执行的命令中,vssadmin
的输出被传递到findstr
和findstr
的输出到,而不考虑屏幕报告(抱歉,无法复制),因此%A
未建立,且未调用set
。