![IF 条件在计划批处理脚本中不起作用](https://linux22.com/image/1571396/IF%20%E6%9D%A1%E4%BB%B6%E5%9C%A8%E8%AE%A1%E5%88%92%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我有一个计划的批处理脚本,根据日期参数,它应该在星期四运行。但它没有按预期工作。
找到下面的代码。
::@echo off
set LOGFILE=D:\New_Folder\SCRIPTTEST\Rundaily1.log
SET RDAY="%date:~0,3%"
if %RDAY%=="Thu" echo "Starting Weekly Matching" >> %LOGFILE%
D:\New_Folder\SCRIPTTEST\Runthursday.bat
exit /b 0
按照上面的代码,如果日期/星期与“星期四”匹配,它应该写入日志并执行另一个批处理脚本。
但即使在“星期四”,它也不会写入日志,也不会运行脚本。您能否检查并帮助解决此问题?请提出建议。
答案1
IF 命令匹配所有字符,包括引号 -
Thu
不匹配"Thu"
。因此,以下任一方法都可以:
if %RDAY%==Thu ... if "%RDAY%=="Thu" ...
编辑 - 我刚刚意识到你在定义 RDAY 时在值中添加了引号。所以我上面用黄色标出的建议不太正确。我更喜欢使用set "RDAY=%date:~0,3%"
,它不会在值中添加引号。但这更多的是风格问题。
%DATE%
因此,您的 IF 语句可能永远不会成立,因为您的机器对不以星期几缩写开头的值使用了不同的格式
但是您的脚本还存在其他问题:
只有您的日志行是有条件的,星期四的脚本将每天运行。只需在 IF 块中添加括号即可轻松解决此问题
if %DATE:~0,3%==Thu (
echo "Starting Weekly Matching" >> %LOGFILE%
D:\New_Folder\SCRIPTTEST\Runthursday.bat
)
值的格式%DATE%
取决于语言环境。您的脚本可能无法在其他机器上运行。您可以使用 WMIC 以与语言环境无关的方式轻松确定是否是星期四:
wmic path win32_localtime get dayofweek | findstr 4 >nul && (
echo "Starting Weekly Matching" >> %LOGFILE%
D:\New_Folder\SCRIPTTEST\Runthursday.bat
)
但是我有一个问题要问您——您为什么要安排一个每日批处理作业,而该作业只在星期四运行另一个批处理?如果您想在星期四运行批处理作业,那么请使用 Windows 任务计划程序来执行此操作。无需在批处理脚本中确定今天是否是星期四,让调度程序完成工作。
答案2
当在我的系统上执行脚本时,%RDAY% 似乎显示为值“27”,即当前月份的日期,而不是您所期望的“星期四”。
我建议尝试以下操作:
::@echo off
set LOGFILE=D:\New_Folder\SCRIPTTEST\Rundaily1.log
for /f %%a in ('wmic path win32_localtime get dayofweek /format:list ^| findstr "="') do (set %%a)
if %dayofweek%==4 echo "Starting Weekly Matching" >> %LOGFILE% && D:\New_Folder\SCRIPTTEST\Runthursday.bat
exit /b 0
从 Stack Overflow 文章中找到了以数值表示的星期几(https://stackoverflow.com/questions/11364147/setting-a-windows-batch-file-variable-to-the-day-of-the-week)。
我假设您只希望在星期四为真时运行批处理文件“RunThursday”,您原来的方法就是每天执行该批处理文件,因为它在 IF 语句之外。在 IF 语句后附加“&&”可让批处理文件也得到执行。
希望这有帮助。