通过 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 变量尚未设置)。启用延迟扩展后,将在每次传递时评估变量。