03/08/2015此时批处理脚本错误

时间:2015-08-03 09:01:43

标签: windows batch-file cmd

首先,我应该提一下我的代码的上下文,它的目的是检查我的计算机上的自动维护任务(或Windows是否引用它,"常规维护")在同一天开始(如果是这样,最后一次运行的日期和时间将与运行此代码的日期相匹配,时间将是12:00:00 pm)并且如果它已经完成(如果是,那么任务&# 39; s状态将是" Ready"而不是" Running"。

然后,代码将在一个名为%maintenance completion%的变量中存储三个检查(0表示成功,1表示失败)中的每一个的值,稍后我将用它来决定是否继续下一部分代码,或者我是否应该回到所有条件都是真的。

FOR /f "tokens=4" %%A IN ('schtasks /query /v /fo list /tn "Microsoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Last Run Time:"') DO set last_maintenance_date=%%A
FOR /f "tokens=5" %%A IN ('schtasks /query /v /fo list /tn "Microsoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Last Run Time:"') DO set last_maintenance_time=%%A
FOR /f "tokens=2" %%A IN ('schtasks /query /v /fo list /tn "Microsoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Status:"') DO set maintenance_status=%%A
FOR /f "tokens=1" %%A IN ('date /t') DO set current_date=%%A
IF /i %maintenance_date% EQU %current_date% (echo date_success & set maintenance_completion=0) ELSE (echo date_fail & set maintenance_completion=1) & set maintenance_completion
IF /i %maintenance_time% EQU 12:00:00 (echo time_success & set maintenance_completion=%maintenance_completion%0) ELSE (echo time_fail & set maintenance_completion=%maintenance_completion%1) & set maintenance_completion
IF /i %maintenance_status% EQU Ready (echo status_success & set maintenance_completion=%maintenance_completion%0) ELSE (echo status_fail & set maintenance_completion=%maintenance_completion%1) & set maintenance_completion
IF %maintenance_completion% EQU 000 (echo success) ELSE (echo %maintenance_completion%)

当我在提升的命令提示符窗口中运行此代码时(%% A被调整为%A),代码运行正常并产生我通常期望的结果:

C:\Windows\system32>FOR /f "tokens=4" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Last Run Time
:"') DO set last_maintenance_date=%A

C:\Windows\system32>set last_maintenance_date=01/08/2015

C:\Windows\system32>FOR /f "tokens=5" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Last Run Time
:"') DO set last_maintenance_time=%A

C:\Windows\system32>set last_maintenance_time=21:16:52

C:\Windows\system32>FOR /f "tokens=2" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" ^| findstr /c:"Status:"') DO
 set maintenance_status=%A

C:\Windows\system32>set maintenance_status=Ready

C:\Windows\system32>FOR /f "tokens=1" %A IN ('date /t') DO set current_date=%A

C:\Windows\system32>set current_date=03/08/2015

C:\Windows\system32>IF /i %maintenance_date% EQU %current_date% (echo date_succe
ss & set maintenance_completion=0) ELSE (echo date_fail & set maintenance_comple
tion=1)
date_fail

C:\Windows\system32>set maintenance_completion
maintenance_completion=1

C:\Windows\system32>IF /i %maintenance_time% EQU 12:00:00 (echo time_success & s
et maintenance_completion=%maintenance_completion%0) ELSE (echo time_fail & set
maintenance_completion=%maintenance_completion%1)
time_fail

C:\Windows\system32>set maintenance_completion
maintenance_completion=11

C:\Windows\system32>IF /i %maintenance_status% EQU Ready (echo status_success &
set maintenance_completion=%maintenance_completion%0) ELSE (echo status_fail & s
et maintenance_completion=%maintenance_completion%1)
status_success

C:\Windows\system32>set maintenance_completion
maintenance_completion=110

C:\Windows\system32>IF %maintenance_completion% EQU 000 (echo success) ELSE (ech
o %maintenance_completion%)
110

但是,当我将其作为批处理脚本运行时,我收到此错误:

C:\Windows\system32>FOR /F "tokens=4" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" | findstr /c:"Last Run Time:
"') DO set last_maintenance_date=%A

C:\Windows\system32>set last_maintenance_date=01/08/2015

C:\Windows\system32>FOR /F "tokens=5" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" | findstr /c:"Last Run Time:
"') DO set last_maintenance_time=%A

C:\Windows\system32>set last_maintenance_time=21:16:52

C:\Windows\system32>FOR /F "tokens=2" %A IN ('schtasks /query /v /fo list /tn "M
icrosoft\Windows\TaskScheduler\Regular Maintenance" | findstr /c:"Status:"') DO
set maintenance_status=%A

C:\Windows\system32>set maintenance_status=Ready

C:\Windows\system32>FOR /F "tokens=1" %A IN ('date /t') DO set current_date=%A

C:\Windows\system32>set current_date=03/08/2015
**03/08/2015 was unexpected at this time.**

C:\Windows\system32>**IF /i  EQU 03/08/2015** (echo date_success & set maintenance_c
ompletion=0) ELSE (echo date_fail & set maintenance_completion=1) & set maintena
nce_completion

此外,如果我替换失败的行上的第一个变量(%maintenance_date%)及其等效的字符串文字(01/08/2015),那么该行运行正常,然后下一行因为与该行上的第一个变量相同的问题(%maintenance_time%)。

这让我相信,出于某种原因,将代码作为批处理文件运行会导致一些错误,因为将变量作为IF语句中的第一项,但我不确定究竟是什么问题是或我如何解决它?

1 个答案:

答案 0 :(得分:0)

弄清楚出了什么问题!这是我的语法错误,因为我写了IF /i %maintenance_date%IF /i %maintenance_time%而不是%last_maintenance_date%%last_maintenance_time%

再次感谢你的建议aschipfl