【问题标题】:How to extract error descriptions from a batch file如何从批处理文件中提取错误描述
【发布时间】:2015-07-18 15:31:17
【问题描述】:

我有这个批处理脚本:

@echo off
set server_list=C:\temp\servers.txt
set cab=E:\PHC\wsusscn2.cab
set sass=E:\PHC\SASS\sass.exe
erase c:\sass\error.log
for /f "tokens=1,2*" %%i in (%server_list%) do (
    echo %%i
    xcopy %cab% \\%%j\c$\sass /Y || echo %%i: ?error description (invalid drive specification, Access denied etc)? >> c:\sass\error.log
    xcopy %sass% \\%%j\c$\sass /Y || echo %%i: ?error description (invalid drive specification, Access denied etc)? >> c:\sass\error.log
    wmic /node:%%j PROCESS CALL CREATE "cmd /c c:\sass\sass.exe -i c:\sass\wsusscn2.cab -o c:\sass\%%i.csv" || echo %%i: ?error description (RPC server not available etc)? >> c:\sass\error.log
    )
pause`

脚本运行良好,但问题是,我无法将错误描述写入 error.log 文件(问号之间)。如果我知道手术失败的确切原因,那将有很大帮助。我尝试了以下方法:

echo %%i: cab file copy failed - %ERRORLEVEL%

但它总是导致错误级别 0(显然是 echo 命令的错误级别)。我尝试了几种方法将错误级别存储到变量中,但总是不成功。此外,errorlevel 只提供了我想要的部分内容,而不是描述,而只是错误的类型。

文件 Servers.txt 在一列中包含服务器的主机名,在第二列中包含它们的 IP。

如何提取错误描述?

【问题讨论】:

  • 你试过用2>>errorlog.txt捕获STDERR吗?
  • 看起来可行,谢谢。奇怪的是,它早上没有工作,但到了下午,没有对文件进行任何修改,它确实工作正常:-)

标签: batch-file error-handling


【解决方案1】:

问题已通过使用 STDERR 解决。这是问题行的工作形式:

xcopy %cab% \\%%j\c$\sass /Y 2>> C:\SASS\error.log
xcopy %sass% \\%%j\c$\sass /Y 2>> C:\SASS\error.log
wmic /node:%%j PROCESS CALL CREATE "cmd /c c:\sass\sass.exe -i c:\sass\wsusscn2.cab -o c:\sass\%%i.csv" 2>> C:\SASS\error.log

此代码准确地键入了我需要的 error.log 文件。由于这个解决方案没有说明服务器的主机名,我不得不将这些行添加到循环的开头:

echo ----------- >> C:\SASS\error.log
echo %%i >> C:\SASS\error.log

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2016-11-15
    • 1970-01-01
    • 2010-11-12
    • 2017-10-26
    相关资源
    最近更新 更多