2015-12-17 120 views
0

我想使用批处理文件来检测它是否不是月份的第一天和第十六天。 我的批处理文件是如下:批处理文件变量不可比

ECHO %date% 
SET day=%date:~7,2% 
IF [%day%] NEQ [16](IF [%day%] NEQ [01] (GOTO RESTART)) 

:RESTART 
echo "STOP SERVICES" 
echo "START SERVICES" 
GOTO END 

:END 
pause 
下面

是结果

C:\Users\user\Desktop>ECHO Thu 12/17/2015 
Thu 12/17/2015 

C:\Users\user\Desktop>SET day=17 

C:\Users\user\Desktop>IF [17] NEQ [16](IF [17] NEQ [01] (GOTO RESTART)) 
'[17]' is not recognized as an internal or external command, 
operable program or batch file. 

C:\Users\user\Desktop>echo "STOP SERVICES" 
"STOP SERVICES" 

C:\Users\user\Desktop>echo "START SERVICES" 
"START SERVICES" 

C:\Users\user\Desktop>GOTO END 

C:\Users\user\Desktop>pause 
Press any key to continue . . . 

为什么以下?:

错误 '[17]' 不被识别为内部或外部的命令,可操作的程序或批处理文件。

如何让这些变量具有可比性?

+2

您在右括号和左括号之间缺少空格。 – Squashman

+0

问题被搁置是因为“一个不能再生的问题”。也许是因为你的日期格式与我的不同。 – Pop

回答

1

您应该使用EQU进行数字比较,并且==用于字符串比较。你也忘了转到结束后你如果,导致脚本总是重新启动:

ECHO %date% 
SET day=%date:~7,2% 
IF not "%day%"=="16" (IF not "%day%"=="01" (GOTO RESTART)) 
GOTO END 
:RESTART 
echo "STOP SERVICES" 
echo "START SERVICES" 
GOTO END 

:END 
pause 

注意,你这个月的一天,方法是针对具体地区。对于一个区域非特定方式使用:

@echo off 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "day=%dt:~6,2%" 
echo %date% 
IF not "%day%"=="16" (IF not "%day%"=="01" (GOTO RESTART)) 
GOTO END 
:RESTART 
echo "STOP SERVICES" 
echo "START SERVICES" 
GOTO END 

:END 
pause 
+0

当天数是1到9时,它不是数字,它会是01到09. – Pop

+0

@Pop如果我的答案解决了您的问题,您应该考虑点击左侧的检查,以便在Google上搜索相同问题的人可以找到它。看看[this](// stackoverflow.com/help/someone-answers)为什么这很重要。 –