有没有办法在批处理文件中记录批处理文件的错误和成功?
我正在尝试将文件从我的计算机复制到 200 台机器(效果很好),但想知道哪个失败以及失败的原因(因为屏幕消失得很快)。
@echo off
if [%1]==[] goto usage
@echo mapping l: to %1\c$
net use * /delete /y
net use l: \\%1\c$ password /user:%1\administrator
if ERRORLEVEL 1 (
echo failed
net use l: \\%1\c$ password /user:%1\administrator
) else (
goto mappingError
) > command.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::
@echo copying link file to C: Drive
copy "c:\_\CopyFileToHost\logoff.cmd" l:\
::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::
@echo deleting l: mapping
net use l: /delete /y
@echo off
goto :eof
:usage
@echo Usage: %0 hostname
exit /B 1
:mappingError
@echo Error mapping remote drive, exiting
exit /B 1
首先,不要使用
if [%1]==[] goto usage
因为方括号在这里没有任何特殊含义。更好的是使用
if "%~1"=="" goto usage
双引号字符具有特殊含义,因为它可以比较包含 1 个或多个空格或 1 个或多个字符的字符串&()[]{}^=;!'+,`~
.
%~1
表示删除了周围双引号的第一个参数。通过在命令提示符窗口中运行来查看帮助输出call /?
更多细节。
其次,阅读 Microsoft 的文章使用命令重定向运算符 and 测试批处理文件中的特定错误级别了解下面的批处理代码。
@echo off
if "%~1"=="" goto usage
%SystemRoot%\System32\net.exe use L: /delete /y 2>nul
(
echo Mapping L: to %~1\c$ ...
%SystemRoot%\System32\net.exe use L: "\\%~1\c$" password /user:%~1\administrator /persistent:no
if not errorlevel 1 (
echo Copying the file X ...
rem copy X L:\
echo Disconnecting network drive L: ...
%SystemRoot%\System32\net.exe use L: /delete /y
)
) >command.txt 2>&1
goto :EOF
:usage
echo Call this batch file with name of computer as parameter.
echo.
pause
错误消息写入stderr被附加到stdout by 2>&1
默认情况下写入标准消息。以及所有写给stdout被重定向到文件command.txt
在当前目录中,因此文本文件包含正确输出顺序的标准消息和错误消息。
如果您希望将命令也写入文本文件,以便更轻松地确定哪个命令来自哪个错误或标准消息,echo
另外还有命令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)