如何修改GPO批处理脚本,成功运行时生成按日期命名的日志文件
修改GPO批处理脚本,添加按日期记录的运行日志
以下是适配需求的完整批处理脚本,同时附带关键逻辑说明:
完整修改后脚本
@echo off :: 配置日志存储路径,建议使用域共享目录(需确保所有工作站有写入权限) set "LogPath=\\YourDomain\SharedLogFolder\OneNoteCleanup" :: 若不需要集中管理,可改用本地路径:set "LogPath=C:\LocalLogs\OneNoteCleanup" :: 自动创建日志目录(不存在则生成) if not exist "%LogPath%" mkdir "%LogPath%" :: 获取标准格式的当前日期(YYYYMMDD),避免区域设置差异 for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "RawDateTime=%%a" set "LogDate=%RawDateTime:~0,8%" set "LogFilePath=%LogPath%\%LogDate%.txt" :: 格式化当前时间,替换开头空格为0(如" 9:15"变为"09:15") set "FormattedTime=%time: =0%" :: 执行OneNote缓存清理操作,屏蔽输出避免干扰日志 del /f /s /q "C:\Users\%username%\AppData\Local\Microsoft\OneNote\16.0\Backup" >nul 2>&1 del /f /s /q "C:\Users\%username%\AppData\Local\Microsoft\OneNote\16.0\Cache" >nul 2>&1 del /f /s /q "C:\Users\%username%\AppData\Roaming\Microsoft\OneNote\16.0" >nul 2>&1 :: 将运行信息追加到当日日志文件 echo %username% | %computername% | %FormattedTime% >> "%LogFilePath%"
关键逻辑说明
日志路径选择
- 域共享目录:所有工作站的日志会集中存储,便于统一查看和管理,需提前创建共享并赋予域工作站/用户写入权限。
- 本地路径:每个工作站仅在本地生成日志,适合不需要集中管理的场景。
日期格式化
使用wmic os get localdatetime获取系统标准时间字符串(格式为YYYYMMDDHHMMSS.ffffff+UUU),截取前8位得到YYYYMMDD格式的日期,避免因系统区域设置(如中文系统的YYYY/MM/DD)导致文件名非法。时间格式化
%time: =0%将时间字符串开头的空格替换为0,确保单小时数(如8:30:20)变为08:30:20,保持日志时间格式统一。清理与日志记录
- 删除命令后添加
>nul 2>&1,屏蔽删除过程中的成功/错误输出,避免干扰日志内容。 - 使用
>>追加模式写入日志,确保同一天内所有工作站的运行记录都添加到同一个日志文件中,完全匹配你期望的格式。
- 删除命令后添加
可选增强:仅在清理成功时记录日志
如果需要仅当所有删除操作完成后才记录日志,可以添加错误检查逻辑:
@echo off set "LogPath=\\YourDomain\SharedLogFolder\OneNoteCleanup" if not exist "%LogPath%" mkdir "%LogPath%" for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "RawDateTime=%%a" set "LogDate=%RawDateTime:~0,8%" set "LogFilePath=%LogPath%\%LogDate%.txt" set "FormattedTime=%time: =0%" :: 初始化错误标记 set "CleanupSuccess=1" del /f /s /q "C:\Users\%username%\AppData\Local\Microsoft\OneNote\16.0\Backup" >nul 2>&1 if %errorlevel% neq 0 set "CleanupSuccess=0" del /f /s /q "C:\Users\%username%\AppData\Local\Microsoft\OneNote\16.0\Cache" >nul 2>&1 if %errorlevel% neq 0 set "CleanupSuccess=0" del /f /s /q "C:\Users\%username%\AppData\Roaming\Microsoft\OneNote\16.0" >nul 2>&1 if %errorlevel% neq 0 set "CleanupSuccess=0" :: 仅当所有操作成功时记录日志 if %CleanupSuccess% equ 1 ( echo %username% | %computername% | %FormattedTime% >> "%LogFilePath%" ) else ( :: 可选:记录失败信息 echo [FAILURE] %username% | %computername% | %FormattedTime% | 清理操作未完全完成 >> "%LogFilePath%" )
内容的提问来源于stack exchange,提问作者J.D
相关产品推荐
相关产品推荐

