You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Cronical执行的BAT脚本中wmic获取时间戳突然失效问题排查

概述

我通过类Windows定时服务Cronical执行一个BAT脚本,此前10天运行一切正常,但今日时间戳计算突然失效,导致脚本执行异常。

异常现象

今日生成的日志文件名变为:

dailyOne_~0,8dt

而非预期的:

dailyOne_20260412_2000.log

我推测问题出在以下时间戳生成代码段,但不清楚为何今日突然出现异常:

REM ===== 3. Timestamp =====
for /f %%a in ('wmic os get localdatetime ^| find "."') do set dt=%%a
set "TIMESTAMP=!dt:~0,8!_!dt:~8,6!"

疑问

  • 脚本未做任何修改,此前运行正常
  • 是否与今日日期(2026/04/14)有关?
  • 是否是杀毒软件阻止了时间戳查询?

完整代码

以下为该BAT脚本的完整代码:

@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.dat中的任务配置如下:

28 21 * * * cmd /c ""D:\Menelaos\sched_scripts\processReport.bat" server1:5000 dailyOne" 

此前所有任务均正常执行,日志生成无异常

日志信息

今日收到的定时任务邮件中包含以下错误信息:

Cronical: Results from cmd /c
""D:\Menelaos\sched_scripts\processReport.bat" server1:5000
dailyOne"

Invalid XSL format (or) file name. Done. Log file:
logs\dailyOne_0,8dt:8,4.log

The filename, directory name, or volume label syntax is incorrect.


以下为凌晨4点任务的日志片段:

2026-04-14 04:00:01.334       [154] Starting job: cmd /c ""D:\Menelaos\sched_scripts\processReport.bat" server:5000"
2026-04-14 04:06:41.293 WARN  [162] Job failed to end, terminating program
2026-04-14 04:06:44.401 ERR   [162] Win32Exception: The operation was canceled by the user
Source: System
TargetSite: Boolean StartWithShellExecuteEx(System.Diagnostics.ProcessStartInfo)
Stack trace:
   at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at Cronical.InjectCtrlC.Break(Int32 processId)
   at Cronical.Misc.ProcessWrapper.Stop()
   at DotNetCommons.Logging.Logger.Catch(Action action)

更新:替代方案

使用以下PowerShell方式获取时间戳后,异常消失:

REM ===== 3. Timestamp (NO seconds) =====
for /f %%a in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmm"') do set "TIMESTAMP=%%a"

if "%TIMESTAMP%"=="" (
    echo ERROR: Failed to generate timestamp
    exit /b 1
)

但直接在CMD中执行WMIC命令正常,因此推测可能为以下三种原因之一:

  1. Cronical运行环境的PATH中未包含WMIC
  2. 杀毒软件或Windows智能扫描阻止了WMIC执行
  3. 相关系统策略限制

此外,注意到WMIC现已被弃用,尽管仍有大量教程将其作为获取时间戳的方案。


内容的提问来源于stack exchange,提问作者Μenelaοs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:07:36