在日常运维或自动化任务中,经常需要让批处理脚本执行一些操作,并记录执行过程。这时候,把运行信息写入日志文件就变得特别有用。比如你每天用批处理备份文件,出了问题却不知道哪一步失败了,如果有日志,一眼就能定位。
基本写入方式:重定向输出
Windows 批处理通过 > 和 >> 来控制命令输出方向。> 会覆盖文件,>> 则是追加内容,写日志一般用追加,避免旧日志被清空。
echo 备份任务开始于 %date% %time% >> C:\logs\backup.log
xcopy D:\data E:\backup /s /i >> C:\logs\backup.log 2>&1
echo 备份完成 >> C:\logs\backup.log
这里用 2>&1 把错误信息也一并写入日志,不然某些报错可能看不到。
封装成日志函数更省事
如果脚本步骤多,重复写 echo ... >> log.txt 很麻烦。可以模拟“函数”方式,统一处理。
@echo off
set LOGFILE=C:\logs\task.log
call :log 系统维护任务启动
call :backup_files
call :log 任务已完成
exit /b
:log
echo [%date% %time%] %* >> %LOGFILE%
exit /b
:backup_files
xcopy C:\config D:\backup\config /s /i >> %LOGFILE% 2>&1
if %errorlevel% equ 0 (
call :log 备份成功
) else (
call :log 备份失败,错误码 %errorlevel%
)
exit /b
这样每次要写日志,直接 call :log 你想记的内容 就行,时间和格式都统一了。
按日期生成日志文件
时间久了,一个日志文件太大不方便查。可以按年月日命名,每天一个。
set LOGDIR=C:\logs
set LOGFILE=%LOGDIR%\log_%date:~0,4%%date:~5,2%%date:~8,2%.txt
if not exist "%LOGDIR%" mkdir "%LOGDIR%"
echo [%time%] 服务检查开始... >> "%LOGFILE%"
这样 2025 年 4 月 5 日的日志就是 log_20250405.txt,清晰又容易归档。
避免权限和路径问题
有时候脚本双击能运行,但计划任务里跑不起来,往往是日志路径没权限或者路径含空格。建议日志放在 C:\logs 这类固定目录,并确保系统有写入权限。路径记得用引号包起来。
set "LOGFILE=C:\my logs\app.log"
echo 正在初始化... >> "%LOGFILE%"
另外,别往程序当前目录写日志,万一从别的地方调用,路径就乱了。
实际应用场景
比如公司 IT 人员每天要检查几台服务器的磁盘空间,可以写个批处理定时跑:
set "LOG=C:\logs\diskcheck_%date:~-4%%date:~4,2%%date:~7,2%.log"
echo ==== 磁盘检查开始 ==== >> "%LOG%"
wmic logicaldisk get size,freespace,caption >> "%LOG%" 2>&1
echo ==== 检查结束 ==== >> "%LOG%"
第二天打开日志一看,哪天哪个盘快满了,清清楚楚。
写日志不是为了炫技,而是让自动化变得更可靠。哪怕只是简单几行 echo 加 >>,也能在出问题时少熬几个夜。