调用带参数的BAT文件的Cron表达式失败
我有以下BAT文件,它需要两个参数:HOST和 REPORT_NAME。我想从Cronical调用它。
@echo off
setlocal enabledelayedexpansion
REM ===== 1. Read parameters =====
set "HOST=%~1"
set "REPORT_NAME=%~2"
REM ===== 2. Validate =====
if "%HOST%"=="" (
echo ERROR: Missing HOST
exit /b 1
)
if "%REPORT_NAME%"=="" (
echo ERROR: Missing REPORT_NAME
exit /b 1
)
REM ===== 3. Timestamp =====
for /f %%a in ('wmic os get localdatetime ^| find "."') do set dt=%%a
set "TIMESTAMP=!dt:~0,8!_!dt:~8,6!"
REM ===== 4. Log file =====
set "LOGFILE=%REPORT_NAME%_!TIMESTAMP!.txt"
type nul > "%LOGFILE%"
REM ===== 5. Live viewer =====
start "Log Viewer - %REPORT_NAME%" cmd /k powershell -NoExit -Command "Get-Content -Path '%LOGFILE%' -Wait"
REM ===== 6. Start log =====
echo ================================================== >> "%LOGFILE%"
echo [%DATE% %TIME%] START >> "%LOGFILE%"
echo HOST=%HOST% >> "%LOGFILE%"
echo REPORT=%REPORT_NAME% >> "%LOGFILE%"
echo ================================================== >> "%LOGFILE%"
REM ===== 7. Call API (NO TIMEOUT, NO RETRY) =====
echo [%DATE% %TIME%] Calling API... >> "%LOGFILE%"
curl -N -sS ^
"http://%HOST%/process/reports/p?reportName=%REPORT_NAME%" ^
>> "%LOGFILE%" 2>&1
REM ===== 8. End log =====
echo. >> "%LOGFILE%"
echo ================================================== >> "%LOGFILE%"
echo [%DATE% %TIME%] END >> "%LOGFILE%"
echo ================================================== >> "%LOGFILE%"
echo Done. Log file: %LOGFILE%
exit /b 0
我已经安装了Cronical,并正在编辑cronical.dat以添加多个调度任务,例如:
14 00 * * * D:\Menelaos\sched_scripts\processReport.bat server1:5000 dailyOne
Cronical给我发来一封邮件,结果如下:
无法启动进程 'D:\Menelaos\sched_scripts\processReport.bat server1:5000 dailyOne':系统找不到指定的文件
Cronical把整行当作完整路径来解析,并忽略参数。但通过命令行运行时,这个就能正常工作。
由于有一些限制,我无法通过任务计划程序来执行。
解决方案
经过一番思考,我找到了一个方案,使 cronical 将完整路径同时解释为参数和命令。
28 21 * * * cmd /c ""D:\Menelaos\sched_scripts\processReport.bat" server1:5000 dailyOne"
The /C 会启动一个不同的进程,双引号实际上让系统理解第一部分是BAT文件,后两个是参数。
The official documentation shows multiple examples with the /c 参数。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。