我正在分析一个不再在这里工作的前 worker 的代码,他使用了很多这个命令:
dir >NUL
我知道这会将输出重定向到“Nul 设备”并且 CMD.EXE 将其解释为 dir 1>Nul 但我不明白它的用途。他在评论中写道: 重置错误级别。
例子:
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set _Year=%%c&set _Month=%%a&set _Day=%%b)
set _Day=%_Day: =%
set _TODAY_FORMATTED=%_Year%%_Month%%_Day%
:: Self Check
:: Reset errorlevel
dir >NUL
set /a _TEST=%_TODAY_FORMATTED%-1
set _rc=%errorlevel%
:: Reset errorlevel
dir >NUL
if %_rc% NEQ 0 call :SELFCHECKERROR& goto end
最佳答案
它所做的正是评论所说它所做的:-)
C:\pax> dir x:
The device is not ready.
C:\pax> echo %errorlevel%
1
C:\pax> dir >nul:
C:\pax> echo %errorlevel%
0
错误级别用于将错误从可执行文件(不幸的是不是每个可执行文件都设置错误级别)传回命令 shell。
执行一个已知成功的程序是重置它的安全方法(a) 尽管 dir
并不是一个好的选择,因为它可能需要一些时间来遍历当前目录中的所有文件。像 ver >nul:
这样的命令可能更好。
(a) 不要认为您可以简单地执行set errorlevel=0
,错误级别是一个“特殊”变量报告系统状态 - 如果您设置它,则会创建一个真实变量,然后拒绝报告 future 命令的实际错误级别。
关于batch-file - CMD 这个命令对 : dir >NUL 有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322536/