Batch file 为什么将环境变量值与字符串进行比较会产生错误消息?
我尝试使用以下代码将当前日期与特定日期进行比较:Batch file 为什么将环境变量值与字符串进行比较会产生错误消息?,batch-file,cmd,Batch File,Cmd,我尝试使用以下代码将当前日期与特定日期进行比较: @echo on if %date%=="Sun 10/15/2017" ( echo "Today is Sunday" ) else ( echo "Today is Unknown" ) pause 但在执行批处理文件时,我得到的只是输出错误消息: 2017年10月15日==“2017年10月15日太阳”此时出人意料 此错误的原因是什么?日期环境变量reference%date%在预处理状态期间被Windows命令解释器替换为执行命令之前
@echo on
if %date%=="Sun 10/15/2017" ( echo "Today is Sunday" ) else ( echo "Today is Unknown" )
pause
但在执行批处理文件时,我得到的只是输出错误消息:
2017年10月15日==“2017年10月15日太阳”此时出人意料
此错误的原因是什么?日期环境变量reference
%date%
在预处理状态期间被Windows命令解释器替换为执行命令之前的地区(国家)相关字符串
从命令提示符窗口运行批处理文件时,可以看到IF命令行在预处理之后:
if Sun 10/15/2017=="Sun 10/15/2017" ( echo "Today is Sunday" ) else ( echo "Today is Unknown" )
因此,在环境变量扩展后,IF命令的语法不正确,因为有Sun
作为第一个参数,空格和Sun 10/15/2017==“Sun 10/15/2017”
被解释为意外运算符
每当比较字符串时,建议仅在双引号字符串中使用双引号,空格字符不解释为参数分隔符。和字符&()[]{}^=;!'+`~|代码>也被解释为双引号字符串中的文字字符
在运行字符串比较时,IF也会比较双引号。因此需要将两个比较的字符串都用双引号括起来
@echo off
if "%DATE%"=="Sun 10/15/2017" ( echo "Today is Sunday." ) else ( echo "Today is unknown." )
pause
如果区域相关日期也包含缩写的工作日,则另一种解决方案
@echo off
if not "%DATE:Sun=%"=="%DATE%" ( echo "Today is Sunday." ) else ( echo "Today is unknown." )
pause
此批处理文件将当前日期字符串与所有出现的不区分大小写的Sun
进行比较,并用未修改的当前日期字符串替换为nothing。字符串替换仅在包含周日缩写的日期字符串上成功,在这种情况下,两个比较的字符串不相等
在我的计算机上,根据Windows区域和语言设置中的配置,如果%DATE%
扩展为不包含工作日的日期字符串,则IF条件永远不会为真
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
echo/?
如果/?
设置/?
Nichie,请使用您找到的解决方案进行更新,并将所需的信息发布在日志中!成员通常不愿意向那些未能遵循合理要求的人提供回复。对于这个问题,您没有在比较的两边匹配双引号,我们不知道您的%date%
变量的格式!在比较的一侧有引号以保护空格。为什么你认为你不需要他们在另一边?