【问题标题】:Create a log file from a copy batch file从复制批处理文件创建日志文件
【发布时间】:2013-10-15 16:00:45
【问题描述】:

我有一个 COPY 批处理文件,它将一个文件复制到多台计算机(大约 300 个,正在从单独的文本文件中读取),我想查看文件复制的结果。如果我能看到成功和失败的文件副本,那就太好了。但是如果只能看到失败的副本就可以了。

这是我现在拥有的代码,效果很好。这些文件正在被复制到我设置的测试计算机上。提前感谢大家抽出时间来帮助我解决这个问题。

for /f "Tokens=*" %%a in (c:\computers.txt) do (set MyVar=%%a& call :next)

pause
goto EOF

:next
echo %MyVar%

if exist "\\%MyVar%\C$\Users\Public\Desktop" (
    Copy "C:\document search.website" "\\%MyVar%\c$\Users\Public\Desktop\" /Y 
    Copy "C:\document search.website" "\\%MyVar%\C$\Users\Public\Favorites\" /Y
) else ( copy "C:\document search.website" "\\%MyVar%\c$\Documents and Settings\All Users\Desktop\Document Search.url" /y
     copy "C:\document search.website" "\\%MyVar%\C$\Documents and Settings\All Users\Favorites\Document Search.url" /y 
)

【问题讨论】:

    标签: batch-file logging copy output


    【解决方案1】:

    您可以在脚本开头添加以下脚本

    call :Logit>>C:\logfiles_location\file_transfer.log 2>&1
    :Logit
    
    echo Start time is: %date% %TIME%
    

    【讨论】:

    • 这有点像我想要的结果日志。我能够看到哪台计算机复制失败或哪一台成功。这可能很难,而且可能要求太多,但是有没有办法让它剥离以显示哪台计算机复制失败,并排除所有成功的计算机?
    • 我注意到我必须在运行批处理后按键盘上的 Enter 来启动命令。
    • 我想我需要在批次处于 PAUSE 状态时按 Enter。
    • 我认为你不需要做任何事情。 i 使用类似的脚本,作业完成时无需按 Enter。
    • 我发现了问题所在。我正在查看日志文件,由于暂停命令,它正在等待我按 Enter 键。我删除了 PAUSE,现在它就像一个魅力!
    【解决方案2】:

    您需要将copy 命令的输出重定向到一个文件。但是,copy 命令只会打印复制的结果,不包括文件名(例如1 file(s) copied.)。因此,您应该在您正在执行的操作的日志中添加一个额外的日志行。

    REM Flush the previous log file
    echo. > someLogFile.log
    
    for /f "Tokens=*" %%a in (c:\computers.txt) do (set MyVar=%%a& call :next)
    
    pause
    goto EOF
    
    :next
    echo %MyVar%
    
    if exist "\\%MyVar%\C$\Users\Public\Desktop" (
        echo Copying to %MyVar% desktop... > someLogFile.log
        Copy "C:\document search.website" "\\%MyVar%\c$\Users\Public\Desktop\" /Y >> someLogFile.log
    
        echo Copying to %MyVar% favorites... > someLogFile.log
        Copy "C:\document search.website" "\\%MyVar%\C$\Users\Public\Favorites\" /Y >> someLogFile.log
    ) else ( 
        echo Copying to %MyVar% desktop... > someLogFile.log
        copy "C:\document search.website" "\\%MyVar%\c$\Documents and Settings\All Users\Desktop\Document Search.url" /y >> someLogFile.log
    
        echo Copying to %MyVar% favorites... > someLogFile.log
        copy "C:\document search.website" "\\%MyVar%\C$\Documents and Settings\All Users\Favorites\Document Search.url" /y >> someLogFile.log
    )
    

    【讨论】:

    • 开启echo会不会容易些?
    • 当我尝试使用它时,日志文件显示为空。我尝试对其进行一些修改,但似乎没有任何效果。 demo.b 的答案可以得到我需要的结果。它提供了命令执行的完整日志。
    • @Mike,我稍作修改,即我将> 重定向更改为>> 重定向,以将文本附加到日志文件而不是每次都覆盖它。
    • @Laf,这里只记录最后一行代码。我使用了 demo.b 的代码,它运行得非常好。我非常感谢所有的帮助,这不会被忽视!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2014-08-22
    相关资源
    最近更新 更多