为什么这些DOS变量为空? (例如%DATE%,%ERRORLEVEL%)

时间:2018-08-14 12:38:31

标签: batch-file command-line dos

我正在使用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的命令提示符下可以成功获取它吗?

1 个答案:

答案 0 :(得分:3)

%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上也会丢失这些变量