通过 robocopy 从多个来源批量复制文件
Batch copy file from multiple sources via robocopy
我正在尝试编写一个脚本,使用 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 到我的 pc.txt 它只使用一些 pc 的名称。
您需要使用延迟扩展:
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
循环的全部内容只会在第一次通过时被解析(因此您的 source 和 dest 变量尚未设置)。启用延迟扩展后,将在每次传递时评估变量。
我正在尝试编写一个脚本,使用 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 到我的 pc.txt 它只使用一些 pc 的名称。
您需要使用延迟扩展:
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
循环的全部内容只会在第一次通过时被解析(因此您的 source 和 dest 变量尚未设置)。启用延迟扩展后,将在每次传递时评估变量。