【问题标题】:How to configure bat file in task scheduler with log file?如何使用日志文件在任务调度程序中配置 bat 文件?
【发布时间】:2025-12-16 20:10:01
【问题描述】:

我有一个python 程序main.py,它需要每天运行。它会在 CMD 提示符下打印一些信息,但我希望这些信息在某个文本文件中。

我可以在 bat 文件中进行如下配置:

C:\Python27\python.exe  D:\main.py > D:\log\FileName_date.txt

对于 2015 年 2 月 6 日运行的日志文件名应为 FileName_20150206.txt,对于 2015 年 2 月 7 日运行的日志文件名应为 FileName_20150207.txt

这里的问题是,如何设置或替换文件名中的日期为YYMMDD 格式,以在任务调度程序中配置.bat 文件?

【问题讨论】:

    标签: python windows batch-file cmd scheduled-tasks


    【解决方案1】:

    找到答案了,

    @echo off
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    
    set "fullstamp=%YYYY%-%MM%-%DD%"
    python D:\main.py > D:\log\FileName_%fullstamp%.txt
    

    将此保存为.bat文件,并在调度程序中配置.bat文件的路径。

    然后你会得到D:\log\FileName_2015-02-06.txt中的日志文件

    【讨论】:

    • 如果使用 Python 而不是 cmd,获取日志名称更简单:import datetime;logname = r'D:\log\FileName_{:%Y-%m-%d}.txt'.format(datetime.date.today())。打开日志文件并将其作为stdout 传递给subprocess.Popen
    • 是的,但是目前程序设计了一种在CMD中打印日志信息的方式。如果是上述情况,那么我可以修改 pgm 以将信息存储在日志文件中而不是 cmd 提示符中。
    • 我的意思是使用另一个 Python 脚本而不是批处理文件来运行 main.py,例如logfile=open(logname, 'w');subprocess.Popen([sys.executable, r'D:\main.py'], stdout=logfile).wait().
    • main.py 旨在打印到其标准 I/O 文件 stdout可能是控制台(我猜这就是 CMD 的意思,但是它与 cmd.exe 无关;控制台窗口是 conhost.exe)。批处理脚本使用> 将标准输出重定向到日志文件。这部分比 Python 的subprocess.Popen 简单,但是在 Python 中获取日志文件名更简单。
    • 是的,这是有道理的@eryksun