我正在尝试编写一个脚本,使用robocopy将来自不同来源和PC的日志文件复制到1个目的地。
for /f "tokens=*" %%a in (pc.txt) do (
set source0="\\%%a\D$\log"
set source1="\\%%a\C$\XX\log"
set source2="\\%%a\C$\XXX\log"
set dest="\\%COMPUTERNAME%\C$\XXX\logscript\%%a"
robocopy %source0% %dest% /create
robocopy %source1% %dest%
robocopy %source2% %dest%
)
我面临的问题是robocopy在第一次运行时没有获得变量,在第二次运行它的工作但是当我向我的pc.txt添加更多的PC时它只使用一些pc的名字。 / p>
答案 0 :(得分:0)
您需要使用延迟扩展:
SETLOCAL EnableDelayedExpansion
for /f "tokens=*" %%a in (pc.txt) do (
set source0="\\%%a\D$\log"
set source1="\\%%a\C$\XX\log"
set source2="\\%%a\C$\XXX\log"
set dest="\\%COMPUTERNAME%\C$\XXX\logscript\%%a"
REM Note that variables are surrounded with exclamation marks instead.
robocopy !source0! !dest! /create
robocopy !source1! !dest!
robocopy !source2! !dest!
)
ENDLOCAL
如果没有这个,FOR
循环的全部内容仅在第一次传递时被解析(因此你的源和目标变量尚未设置)。启用延迟扩展后,将在每次传递时评估变量。