调用带参数的BAT文件的Cron表达式失败

后端开发 2026-07-10

我有以下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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章