为啥这些 DOS 变量是空的? (例如 %DATE%、%ERRORLEVEL%)

Posted

技术标签:

【中文标题】为啥这些 DOS 变量是空的? (例如 %DATE%、%ERRORLEVEL%)【英文标题】:Why are these DOS Variables Empty? (e.g. %DATE%, %ERRORLEVEL%)为什么这些 DOS 变量是空的? (例如 %DATE%、%ERRORLEVEL%) 【发布时间】:2019-01-21 07:45:51 【问题描述】:

我使用的是 Windows XP SP3。

如果我打开命令提示符窗口,然后键入

ECHO %DATE%

我明白了:

14-08-2018

我应该这样做。

但是如果我退出 Windows 并从具有 DOS 的可启动 USB 闪存驱动器启动我的计算机 (真正的 DOS,而不是 Windows 中的命令提示符), 并输入相同的命令, 那么%DATE% 好像是空的。

命令

ECHO %DATE%

回复

ECHO is On

因为它认为我刚刚写了ECHO, 因为%DATE%返回的值是""。

我尝试了 2 个不同的 DOS 版本.. Win98的DOS,WinME的DOS。 (2 个不同的 USB 闪存驱动器)

有谁知道为什么我无法在真实的 DOS 中获取日期, 而我在 Windows 的命令提示符下可以成功获取它?

【问题讨论】:

你为什么期望%DATE%被填充? 它是一个环境变量。事实是在 Windows XP 的命令提示符中它被填充了。所以在真正的 DOS 中它不是?顺便说一句,这只是一个例子..还有更多,比如 %ERRORLEVEL% 可能还有更多.. 因为 MS-DOS 和 Windows 是两个不同的操作系统,MS-DOS 的命令提示符不是 Windows 的命令提示符。后者在前者的基础上增加了许多功能。 很确定您在 DOS 时代从未使用过 %errorlevel%。您很可能使用了IF ERRORLEVEL 1 @spaceman:正确:echo errorlevel 只打印字符串errorlevel。但if errorlevel 是complete different thing 【参考方案1】:

%ERRORLEVEL% 在 DOS 中不是变量

%ERRORLEVEL%

在 DR-DOS 7.02 及更高版本的 COMMAND.COM 中,此伪变量返回由外部程序或 RETURN 命令返回的最后一个错误级别,例如“0”..“255”。另见 Windows 下同名伪变量%ERRORLEVEL%IF ERRORLEVEL 条件命令。

https://en.wikipedia.org/wiki/Environment_variable#DOS

如您所见,它只存在于 DR-DOS 7.02 及以上版本和 Windows 中。 DR-DOS 也有%ERRORLVL%

OTOH %DATE% 仅存在于 Windows

%DATE%

这个伪变量扩展到当前日期。日期根据当前用户的日期格式偏好显示。

https://en.wikipedia.org/wiki/Environment_variable#Windows

它们是 cmd.exe 的新功能,需要启用 command extension

如果命令扩展被禁用,以下动态变量将无法访问:

%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%

https://ss64.com/nt/syntax-variables.html

因此,如果您为了 DOS 兼容性而关闭命令扩展,您也会在 Windows cmd.exe 上丢失这些变量

【讨论】:

谢谢你。令人惊讶的是批处理文件编程的局限性,过去的岁月让我忘记了它的局限性。在这种情况下,我只需用另一种语言编写我需要的内容,然后将其编译为 .COM 或 .EXE。毫无疑问,我将能够在那里获得 Date,希望我也能够获得 ErrorLevel 变量......

以上是关于为啥这些 DOS 变量是空的? (例如 %DATE%、%ERRORLEVEL%)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ComboBox 是空的,尽管变量已初始化?

为啥 UITableView 是空的?

为啥 FormData 是空的? [复制]

为啥这个viewholder是空的?

PHP 打印布尔值是空的,为啥?

为啥我的 Eclipse 工作区是空的?