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%
变量的格式!在比较的一侧有引号以保护空格。为什么你认为你不需要他们在另一边?