批处理文件:环境变量“if”字符串测试


1

在批处理文件中,我正在调用另一个批处理文件来设置许多日期环境变量。

数据变量设置正确,我可以调用它们。

但是,在这种情况下,我需要比较其中两个环境变量,并确定它们是否相同,以便有条件地启动批处理的其余部分(或跳到结束/退出)。

但是,我似乎无法获得条件来执行两个环境变量的测试(比较)。

这些定义为%today2%(今天的日期设置为MMDDYY)和%firstmonday%,它是计算的月份的第一个星期一并设置为MMYYDD)。今天(2015年10月14日)运行时,这些返回101415和110215。

然后我尝试以下列方式测试这些:

if %today2%==%firstmonday% goto GO else END

然而,测试似乎完全被忽略了 - 测试总是进行到GO而不管。

如果我echo %today%%firstmonday%他们当然不同,但不知何故测试评估为真并执行。

如果我没有清楚地解释自己,请告诉我,我会尽力做得更好。在谈到这一点时,我相当新手,但是已经用了一段时间了解它并且似乎无法弄清楚逻辑上的缺陷。


如果你输入if /?它,就会在有else子句时提供正确语法的示例:实际上它将你的例子作为一个不起作用的命令的实例,以及两个工作版本。因为else语法不够优雅,我发现更容易反转测试,例如if not %today2%==%firstmonday% goto END,使用以下GO代码作为代码。
AFH 2015年

你必须..else goto END:END你的:GO标记,因为它目前只是去下一行。
paradroid 2015年

Answers:


1

我创建了两个批处理文件:b1.cmdb2.cmd其跟随。首先,b2.cmd它按照描述设置变量:

set today2=101415
set firstmonday=110215

然后b1.cmd按要求执行:

@echo off
call b2.cmd
echo today=%today2%
echo firstmonday=%firstmonday%
if "%today2%"=="%firstmonday%" (
    goto go
) else (
    goto end
)
:go
echo at go
goto :EOF
:end
echo at end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.