bat批处理删除日志文件
公司的程序猿写的软件只管生成日志,却没写删除过期的日志,时间久了日志文件非常多,占用大量空间,写这个是为了方便手动删除日志文件。目前还没有思路写自动搜索并生成日志目录表的批处理,比如说全盘搜索包含log的,以后再搞吧。
参考:《BAT批处理定期删除清理指定N天前的文件》
删除前N天日志文件 [无需确认,第一次慎用]
使用说明:
-
复制下面的代码,粘贴到txt文件,文件名称随意(代码会自动修改),修改后缀为bat。
-
使用时需要自行创建**《日志目录表.txt》**,和bat文件放在一起即可。
-
日志目录表.txt中填写需要删除的日志文件所在文件夹的路径。每一行填写一个文件夹的路径。
-
指定天数,是指需要删除多少天以前的文件。例如代码中填的是100,就会删除100天前的文件。这里的数值修改后,运行时bat文件名称会同步改变。
-
运行过程中会在桌面生成一个统计删除文件信息的文件,不用管它,代码运行结束时会自动删除的。
-
注意:批处理删除的文件,不可恢复,使用时要小心别删错了。
:: 复制下面的代码,粘贴到txt文件,修改后缀为bat,双击运行即可。
@echo off
SETLOCAL enabledelayedexpansion
title Delete files from %DaysAgo% days ago
set "a=%1"
:: 指定天数(0~32767),0代表所有日期的文件。
if "%a%"=="" set DaysAgo=100
if not exist "%~dp0删除前%DaysAgo%天文件 [第一次慎用].bat" (
ren "%~f0" "删除前%DaysAgo%天文件 [第一次慎用].bat"
call "%~dp0删除前%DaysAgo%天文件 [第一次慎用].bat" %DaysAgo%
)
echo,
echo,########## Starting deleting ##########
for /f "eol=# tokens=*" %%i in (日志目录表.txt) do (
echo,===============================================
echo,Starting deleteing files in the [%%i] directory that are %DaysAgo% days old.
if exist "%%i" (
forfiles /p "%%i" /s /m *.* /c "cmd /c del /f /q /a @path&&echo,[deleted]@path&&echo,@path=@fsize>>%userprofile%\fileinfo.log" /d -%DaysAgo%
) else ( echo,[%%i] File directory does not exist)
)
set count_fn=0
set count_fs=0
for /f "delims== tokens=1,2" %%a in (%userprofile%\fileinfo.log) do (
set /a count_fn+=1
set /a count_fs+=%%b
)
set /a count_fs/=1024
echo,
echo,Total deletions this time:%count_fn% files,%count_fs%KB。
echo,
echo,########## End of deletion ##########
del "%userprofile%\fileinfo.log"
pause>nul
删除前N天日志文件 [另外一个版本]
使用说明:
这个是比较安全的删除方法,使用方法大同小异。
每次删除一个路径中的文件前,会先打开文件夹看下,确认好后再决定是否删除,在命令提示符输入y或者n。
用起来比较麻烦。
@echo off
SETLOCAL enabledelayedexpansion
title 删除%DaysAgo%天前的文件
set "a=%1"
:: 指定天数
echo,
if "%a%"=="" set /p DaysAgo=. 指定删除天数(0~32767,0代表所有日期):
if not exist "%~dp0删除前%DaysAgo%天文件.bat" (
ren "%~f0" "删除前%DaysAgo%天文件.bat"
call "%~dp0删除前%DaysAgo%天文件.bat" %DaysAgo%
)
echo,
echo,########## 删除日志开始 ##########
for /f "eol=# tokens=*" %%i in (日志目录表.txt) do (
echo,
echo,===开始删除 [%%i] 目录中%DaysAgo%天前的日志文件===
if exist "%%i" (
start "" "%%i"
color 0c
choice /m "请确认此目录中日志文件是否删除"
if !errorlevel! equ 1 (
color 07
forfiles /p "%%i" /s /m *.* /c "cmd /c del /f /q /a @path&&echo,[已删除]@path&&echo,@path=@fsize>>%userprofile%\fileinfo.log" /d -%DaysAgo%
)
) else ( echo,[%%i] 目录不存在)
echo,=============================完成=============================
)
set count_fn=0
set count_fs=0
for /f "delims== tokens=1,2" %%a in (%userprofile%\fileinfo.log) do (
set /a count_fn+=1
set /a count_fs+=%%b
)
set /a count_fs/=1024
echo,
echo,本次共删除:%count_fn%个文件,%count_fs%KB。
echo,
echo,########## 删除日志结束 ##########
del "%userprofile%\fileinfo.log"
pause>nul