batch-file - CMD 这个命令对 : dir >NUL 有什么好处

标签 batch-file cmd

我正在分析一个不再在这里工作的前 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/

相关文章:

batch-file - 使用批处理拆分为卷

batch-file - DOS 批处理 : SET variable and ECHO it within (. ..) block

windows - 使用 Windows 命令行查看文件是否存在并重命名

batch-file - 在批处理文件中获取原始参数或命令

ios - CMD - 获取 iPhone 的 MAC 地址

windows - 如何测试驱动器中的软盘?

batch-file - 用户输入-DOS批处理文件

batch-file - 为什么当前时间不在 FOR 循环中更新?

windows - SETX 不会将路径附加到系统路径变量

qt - 无法执行 vcvarsall.bat