为啥这些 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%)的主要内容,如果未能解决你的问题,请参考以下文章