You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为针对服务器列表执行的Robocopy复制操作生成结果输出文件

如何为针对服务器列表执行的Robocopy复制操作生成结果输出文件

我来帮你搞定这个问题!要实现把每台服务器的Robocopy复制结果(成功/失败)记录到输出文件里,我们可以利用Robocopy的退出码特性来判断操作状态,再把服务器名和对应的结果写入日志文件。

先给你划个重点:Robocopy的退出码不是传统的「0成功非0失败」,它是位掩码形式的——退出码小于8的时候,说明复制操作整体是成功的(包括没有文件需要复制的情况);而退出码≥8时,才代表出现了错误(比如网络不通、权限不足、文件找不到等)。

下面是修改后的完整批处理脚本,我会一步步给你解释:

@echo off
setlocal enabledelayedexpansion

:: 定义输出日志文件的路径,你可以根据需求修改位置和文件名
set "LogFile=Robocopy_Results.log"

:: 初始化日志文件,写入标题和时间戳(如果要追加记录而非覆盖,把第一行的>改成>>即可)
echo Robocopy 复制操作结果记录 > "%LogFile%"
echo 记录生成时间: %date% %time% >> "%LogFile%"
echo ------------------------------- >> "%LogFile%"

for /F "tokens=*" %%i in (Maquinas_log.txt) do (
    echo 正在处理服务器:%%i
    :: 执行Robocopy,加上/NFL/NDL/NJH/NJS参数是为了减少冗余输出,保持控制台简洁
    robocopy.exe "E:\HERRAMIENTAS\SCRIPTS\ActualizarFirmas" \\%%i\c$\temp firmas.exe /R:1 /W:1 /NFL /NDL /NJH /NJS
    
    :: 获取Robocopy的退出码,这里需要启用延迟扩展才能在循环内正确读取变量
    set "ExitCode=!errorlevel!"
    :: 判断操作状态并写入日志
    if !ExitCode! LSS 8 (
        echo %%i - 复制成功 >> "%LogFile%"
    ) else (
        echo %%i - 复制失败,退出码: !ExitCode! >> "%LogFile%"
    )
)

echo 所有服务器处理完成!结果已写入 "%LogFile%"
exit /b

关键细节说明:

  • setlocal enabledelayedexpansion:因为我们在for循环里需要读取和修改变量(比如ExitCode),必须启用延迟扩展才能让变量在循环内实时更新,否则会拿到错误的退出码值。
  • /NFL /NDL /NJH /NJS:这几个参数用来关闭Robocopy的冗余输出(比如文件列表、目录列表、作业头信息),如果需要保留Robocopy的详细执行日志,可以直接删掉这些参数,甚至把Robocopy的输出也追加到日志里——只需要把Robocopy的命令改成:robocopy.exe ... >> "%LogFile%" 2>&1(这样标准输出和错误信息都会写入日志)。
  • 日志初始化部分:如果希望每次运行脚本都保留之前的记录,把第一行的>改成>>即可,这样新的记录会追加到日志末尾。

如果你还有其他定制需求(比如区分不同类型的失败原因),可以基于Robocopy的退出码做更细致的判断,比如退出码8代表磁盘错误,16代表严重错误等等。

备注:内容来源于stack exchange,提问作者juvenal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:49:12