批处理写入日志文件的实用技巧

在日常运维或自动化任务中,经常需要让批处理脚本执行一些操作,并记录执行过程。这时候,把运行信息写入日志文件就变得特别有用。比如你每天用批处理备份文件,出了问题却不知道哪一步失败了,如果有日志,一眼就能定位。

基本写入方式:重定向输出

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>>,也能在出问题时少熬几个夜。