@[TOC](Windows 定时任务设置、批处理bat命令详解和通过conda虚拟环境定时运行Python程序)
Windows 定时任务设置详解 方法一:通过图形界面创建任务
打开任务计划程序
按 Win+R,输入 taskschd.msc 并回车
或在控制面板中找到”管理工具” → “任务计划程序”
创建基本任务
在右侧操作栏点击”创建基本任务”
输入名称和描述,例如”生产报告生成任务”
设置触发器
选择执行频率:每天、每周或每月
设置具体时间(如每天凌晨1点)
设置操作
选择”启动程序”
在”程序或脚本”字段中浏览选择您的 .bat 文件
在”起始于”字段中输入批处理文件所在目录的路径
完成设置
方法二:使用命令行创建(推荐用于自动化部署) 1 schtasks /create /tn "生产报告生成任务" /tr "E:\path \to\run_report.bat" /sc daily /st 01 :00 /ru SYSTEM /rl HIGHEST
参数详解:
/tn "任务名称" - 指定任务的名称
/tr "任务运行的程序或命令" - 指定要运行的程序或脚本的路径
/sc 日程计划 - 指定计划频率:
daily - 每天
weekly - 每周
monthly - 每月
onstart - 系统启动时
onlogon - 用户登录时
onidle - 系统空闲时
/st HH:MM - 指定开始时间(24小时格式)
/ru 用户名 - 指定运行任务的用户账户(使用SYSTEM表示系统账户)
/rl 权限级别 - 指定权限级别:
HIGHEST - 最高权限
LIMITED - 标准权限
其他有用参数:
/mo 修饰符 - 指定任务 within 其计划类型的频率:
对于每月任务:/mo 1 表示每1个月
对于每周任务:/mo 2 表示每2周
/d 星期 - 指定一周中的某天或某些天(MON、TUE、WED等)
/ed MM/DD/YYYY - 指定任务计划的结束日期
/sd MM/DD/YYYY - 指定任务计划的开始日期
/it - 仅在指定用户登录时才运行任务(与/ru一起使用)
示例命令
每天凌晨1点运行 :
1 schtasks /create /tn "生产报告每日生成" /tr "E:\reports\run_report.bat" /sc daily /st 01 :00
每周一早上6点运行 :
1 schtasks /create /tn "生产报告每周生成" /tr "E:\reports\run_report.bat" /sc weekly /d MON /st 06 :00
每月第一天运行 :
1 schtasks /create /tn "生产报告每月生成" /tr "E:\reports\run_report.bat" /sc monthly /mo 1 /d 1 /st 02 :00
管理现有任务
查看所有任务:schtasks /query
删除任务:schtasks /delete /tn "任务名称"
运行任务:schtasks /run /tn "任务名称"
结束任务:schtasks /end /tn "任务名称"
Windows 批处理(.bat)命令详解 批处理文件是包含一系列 DOS 命令的文本文件,用于自动化执行任务。
基础命令 1. @echo 1 2 3 4 @echo off # 关闭命令回显(不显示执行的命令本身) @echo on # 开启命令回显echo Hello # 输出文本到屏幕echo . # 输出空行
2. rem 和 ::
3. pause 1 pause # 暂停执行,显示"请按任意键继续..."
4. title 1 title 我的批处理程序 # 设置命令窗口的标题
变量操作 5. set 1 2 3 4 5 6 set var=value # 定义变量set var= # 清空变量set /p var=请输入: # 接收用户输入set /a result=1 +1 # 数学计算setlocal # 开始局部环境变量endlocal # 结束局部环境变量
6. 特殊变量 1 2 3 4 5 6 7 8 %0 - 批处理文件本身 %1 , %2 , ... - 命令行参数 %* - 所有参数%CD% - 当前目录%DATE% - 当前日期%TIME% - 当前时间%RANDOM% - 随机数%ERRORLEVEL% - 上条命令的退出代码
7. 参数扩展 1 2 3 %~dp0 # 当前批处理文件所在目录的完整路径 %~n0 # 当前批处理文件名(不含扩展名) %~x0 # 当前批处理文件扩展名
流程控制 8. if 条件判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 if condition command :: 比较字符串if "str1"=="str2" commandif not "str1"=="str2" command :: 检查文件存在if exist filename commandif not exist filename command :: 检查变量是否定义if defined var command :: 数值比较if %n1% equ %n2% command # 等于if %n1% neq %n2% command # 不等于if %n1% lss %n2% command # 小于if %n1% leq %n2% command # 小于等于if %n1% gtr %n2% command # 大于if %n1% geq %n2% command # 大于等于 :: 多行条件if condition ( command1 command2 ) else ( command3 command4 )
9. for 循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 :: 简单循环for %%i in (1 ,2 ,3 ) do echo %%i :: 文件循环for %%i in (*.txt) do echo %%i :: 数字范围循环for /l %%i in (1 ,1 ,5 ) do echo %%i :: 解析文本内容for /f "delims= tokens=1 ,2 " %%i in (file.txt) do echo %%i %%j :: 解析命令输出for /f "delims=" %%i in ('dir /b') do echo %%i
文件操作 10. 目录操作 1 2 3 4 5 6 cd \path \to\dir # 切换目录cd /d D:\path # 切换驱动器并目录dir # 列出文件mkdir folder # 创建目录rmdir folder # 删除目录rmdir /s /q folder # 强制删除目录(无确认)
11. 文件操作 1 2 3 4 5 6 copy file1 file2 # 复制文件xcopy src dest # 复制目录move file1 file2 # 移动/重命名文件del file.txt # 删除文件del /q *.tmp # 安静模式删除type file.txt # 显示文件内容
12. 重定向 1 2 3 4 5 command > file.txt # 输出重定向(覆盖) command >> file.txt # 输出重定向(追加) command < input.txt # 输入重定向 command 2 > error.log # 错误输出重定向 command > output.log 2 >&1 # 标准输出和错误都重定向
函数和调用 13. call 1 2 call another.bat # 调用另一个批处理文件call :label args # 调用标签作为函数
14. goto 1 2 goto label # 跳转到标签 :label # 定义标签
15. 函数示例 1 2 3 4 5 6 7 8 @echo offcall :myfunction "参数1 " "参数2 "goto :eof :myfunctionecho 第一个参数: %~1 echo 第二个参数: %~2 goto :eof
错误处理 16. errorlevel 1 2 3 4 5 6 commandif errorlevel 1 ( echo 命令执行失败 ) else ( echo 命令执行成功 )
17. 强制出错退出 1 2 ver > nul # 总是成功的命令echo %errorlevel% # 显示错误级别
实用技巧 18. 延迟变量扩展 1 2 3 4 5 6 setlocal enabledelayedexpansionset var=1 for /l %%i in (1 ,1 ,3 ) do ( set /a var=var+1 echo !var! # 使用!而不是%获取实时值 )
19. 颜色设置 1 color 0 A # 背景黑(0 ),文字绿(A)
20. 超时等待 1 2 timeout /t 5 # 等待5 秒 timeout /t 5 /nobreak # 等待5 秒,不可用Ctrl+C中断
调试技巧
逐行调试 : 移除 @echo off 查看每条命令执行
输出变量 : 使用 echo 变量值: %var% 调试
暂停查看 : 在关键位置添加 pause
日志记录 : 使用 >> log.txt 重定向输出到日志文件
通过conda虚拟环境定时运行Python程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 @echo off setlocal enabledelayedexpansion rem ==== Miniconda 配置 ==== rem 自动检测 Miniconda 安装路径if exist "E:\Miniconda3" ( set "CONDA_ROOT=E:\Miniconda3" ) else ( echo 未找到 Miniconda 安装路径 exit /b 1 )set "ENV_NAME=production_report" set "PYTHON_SCRIPT=%~dp0ollama_analysis.py" set "LOG_DIR=%~dp0logs" set "REPORT_DIR=%~dp0output" rem ==== 日期处理 ====for /f "tokens=1-3 delims=/ " %%a in ('date /t' ) do ( set DATE_STR=%%c%%a%%b )set LOG_FILE=%LOG_DIR%\production_report_%DATE_STR%.log rem ==== 确保目录存在 ====if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" if not exist "%REPORT_DIR%" mkdir "%REPORT_DIR%" rem ==== 激活 Miniconda 环境 ==== call "%CONDA_ROOT%\Scripts\activate.bat" %ENV_NAME%if !errorlevel! neq 0 ( echo [%time %] 激活 Miniconda 环境失败 >> "%LOG_FILE%" exit /b 1 ) rem ==== 运行 Python 脚本 ====echo [%time %] Miniconda 环境激活成功 >> "%LOG_FILE%" echo [%time %] 开始运行生产报告生成脚本 >> "%LOG_FILE%" python "%PYTHON_SCRIPT%" >> "%LOG_FILE%" 2>&1set EXIT_CODE=!errorlevel! rem ==== 检查执行结果 ====if !EXIT_CODE! equ 0 ( echo [%time %] 报告生成成功 >> "%LOG_FILE%" ) else ( echo [%time %] 脚本执行失败,错误码: !EXIT_CODE! >> "%LOG_FILE%" ) endlocalexit /b %EXIT_CODE%
示例说明
关闭命令回显,执行时不显示批处理文件中的命令本身,只显示命令的输出结果
1 setlocal enabledelayedexpansion
启用延迟环境变量扩展,允许在代码块内使用 !var! 语法实时获取变量值(而不是预扩展的 %var%)
1 2 3 4 5 6 if exist "E:\Miniconda3" ( set "CONDA_ROOT=E:\Miniconda3" ) else ( echo 未找到 Miniconda 安装路径 exit /b 1 )
检查指定的 Miniconda 安装路径是否存在
如果存在,设置 CONDA_ROOT 环境变量为该路径
如果不存在,显示错误信息并使用 exit /b 1 退出批处理并返回错误代码 1
1 set "ENV_NAME=production_report"
设置 Conda 环境名称为 production_report
1 set "PYTHON_SCRIPT=%~dp0ollama_analysis.py"
%~dp0 表示当前批处理文件所在的目录路径
设置 Python 脚本路径为当前目录下的 ollama_analysis.py
1 set "REPORT_DIR=%~dp0output"
设置报告输出目录为当前目录下的 output 文件夹
1 2 3 for /f "tokens=1 -3 delims=/ " %%a in ('date /t') do ( set DATE_STR=%%c %%a %%b )
获取当前系统日期并重新格式化为 年月日 格式(如 20230915)
date /t 获取当前日期
tokens=1-3 将日期分割为三部分
delims=/ 使用斜杠和空格作为分隔符
%%c%%a%%b 重新组合日期部分(年、月、日)
1 set LOG_FILE=%LOG_DIR% \production_report_%DATE_STR% .log
1 if not exist "%LOG_DIR% " mkdir "%LOG_DIR% "
1 if not exist "%REPORT_DIR% " mkdir "%REPORT_DIR% "
1 call "%CONDA_ROOT% \Scripts\activate.bat" %ENV_NAME%
调用 Miniconda 的激活脚本,激活指定的 Conda 环境
call 用于调用另一个批处理文件并返回到当前批处理
1 2 3 4 if !errorlevel! neq 0 ( echo [%time% ] 激活 Miniconda 环境失败 >> "%LOG_FILE% " exit /b 1 )
检查上一条命令的退出代码(使用延迟扩展 !errorlevel!)
如果退出代码不等于 0(表示失败),则将错误信息追加到日志文件并退出
1 echo [%time% ] Miniconda 环境激活成功 >> "%LOG_FILE% "
1 echo [%time% ] 开始运行生产报告生成脚本 >> "%LOG_FILE% "
1 python "%PYTHON_SCRIPT% " >> "%LOG_FILE% " 2 >&1
运行 Python 脚本
>> "%LOG_FILE%" 将标准输出追加到日志文件
2>&1 将标准错误重定向到标准输出(即错误信息也会写入日志文件)
1 set EXIT_CODE=!errorlevel!
将 Python 脚本的退出代码保存到变量 EXIT_CODE 中
1 2 3 4 5 if !EXIT_CODE! equ 0 ( echo [%time% ] 报告生成成功 >> "%LOG_FILE% " ) else ( echo [%time% ] 脚本执行失败,错误码: !EXIT_CODE! >> "%LOG_FILE% " )
检查 Python 脚本的退出代码
如果为 0(成功),记录成功信息
如果不为 0(失败),记录失败信息和错误代码
退出批处理文件,并返回 Python 脚本的退出代码
/b 参数表示只退出当前批处理文件,而不退出命令提示符窗口