我尝试使用此代码比较当前日期等于特定日期:
@echo on
if %date%=="Sun 10/15/2017" ( echo "Today is Sunday" ) else ( echo "Today is Unknown" )
pause
但是在执行批处理文件时,我只输出错误消息:
10/15/2017 ==“Sun 10/15/2017”此时出人意料。
出现此错误的原因是什么?
答案 0 :(得分:1)
日期环境变量引用%date%
在预处理状态期间由区域(国家/地区)依赖字符串替换为Windows命令解释程序 IF 命令完全执行。
在命令提示符窗口中运行批处理文件时,可以看到 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"
被解释为意外操作符。< / p>
每当比较字符串时,建议在双引号字符串中使用双引号,空格字符不会被解释为参数分隔符。字符&()[]{}^=;!'+,`~|<>
也被解释为双引号字符串中的文字字符。
在运行字符串比较时,双引号也会通过 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
出现的事件进行比较,并将其替换为未修改的当前日期字符串。字符串替换仅在包含工作日缩写Sun
的日期字符串上成功,在这种情况下,两个比较的字符串不相等。
在我的计算机上, IF 条件永远不会,因为%DATE%
根据Windows 区域和语言设置中的配置扩展为不包含工作日的日期字符串。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
if /?
set /?