有趣的BAT
最近某个用到的第三方程序会产生很多日志文件在logs目录中,每天一个log文件,类似 2014-05-07001.log。日积月累这个目录文件数量非常多,手动清除还是比较麻烦的。
由于这个软件不是自己开发的,无法改变log产生机制,于是想到找个BAT放到计划任务中定时删除这些文件。
网上找到几个BAT都无法正确运行,估计是别人转载的时候也没真正使用过,于是我在别人代码的基础上略加修改现在可以正常运行了:
@echo off&setlocal enabledelayedexpansion set ds=7 set di=d:\Soft\logs set "dy=%date:~,4%" set "dm=%date:~5,2%" set "dd=%date:~8,2%" echo 当前日期为:%dy%年%dm%月%dd%日 echo. if %dm:~,1%==0 set "dm=%dm:~1%" if %dd:~,1%==0 set "dd=%dd:~1%" set/a "dd-=ds" if !dd! gtr 0 goto ok echo 正在计算%ds%天前的日期... :ry set /a "feb=^!(!dy!&3)+28" if "%dy:~2,2%" equ "00" set/a "feb=feb-1+^!(dy:~,2&3)" if %feb%==29 echo %dy%年是闰年 echo. :tyt set n=0 set/a "dm-=1" if %dm% equ 0 ( set/a "dy-=1,dm=12,dd+=31" if %dd% gtr 0 (goto ok )else goto ry ) for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do ( set/a n+=1 if !n! equ %dm% set/a "dd+=%%a") if %dd% leq 0 goto tyt :ok set/a "ymd=dy*10000+dm*100+dd" echo. echo 前%ds%天的日期是%ymd:~,4%年%ymd:~4,2%月%ymd:~6,2%日 echo 正在获取文件日期再进行比较 echo 并删除%ds%天前创建并且%ds%天内未修改过的文件... cd/d "%di%" for /f "delims=" %%i in ('dir/a/a-d/b')do ( Set "strymdx=%%~ti%" Set "xdy=!strymdx:~,4!" Set "xdm=!strymdx:~5,2!" Set "xdd=!strymdx:~8,2!" Set "ymdx=!xdy!!xdm!!xdd!" Rem set ymdx=!ymdx~,4!!ymdx~5,2!!ymdx~8,2! echo %%i,ymd=%ymd%,ymdx=!ymdx!,ti=%%~ti if !ymdx! lss %ymd% ( if "%%i" neq "%~nx0" del/f "%%i")) echo. echo 处理完毕!即将退出... @pause
自动运行的时候请将最后一行的@pause 去掉,这样cmd窗口就可以自动关闭了
------------------------------------------------
从IE缓存目录中复制出来的文件名总是带有[1],要批量替换掉[1]可以用下面这个有趣的BAT
@echo off title 清除缓存中复制出来的文件名中[1]字符! setlocal EnableDelayedExpansion set wkdxz=[1] for /f "usebackq delims=/ tokens=1,2" %%b in ('%wkdxz%') do ( for %%a in (*) do ( set xz=%%a if "%%c"=="" ren !xz! !xz:%%b=! 2>nul||ren !xz! "!xz:%%b=!(2)" 2>nul ren !xz! !xz:%%b=%%c! 2>nul||ren !xz! "!xz:%%b=%%c!(2)" 2>nul ) title 成功! color 0a&cls&echo 重命名成功! ) del %0
替换文件名中的任意字符:
@echo off title 请按提示输入字符! setlocal EnableDelayedExpansion echo. echo 要把字符"a"替换成字符"b" 请输入a/b echo. set /p wkdxz= 要去掉字符a就直接输入a for /f "usebackq delims=/ tokens=1,2" %%b in ('%wkdxz%') do ( for %%a in (*) do ( set xz=%%a if "%%c"=="" ren !xz! !xz:%%b=! 2>nul||ren !xz! "!xz:%%b=!(2)" 2>nul ren !xz! !xz:%%b=%%c! 2>nul||ren !xz! "!xz:%%b=%%c!(2)" 2>nul ) title 成功! color 0a&cls&echo 重命名成功! ) ping /n 3 127.1>nul
添加WINDOWS定时重启任务的BAT
@echo off echo ┌────────────────────────┐ echo │Windows服务器定时重启 │ echo └────────────────────────┘ echo 正在设置…… rem copy shutdown.exe %windir%\system32\shutdown.exe at 0:20 /every:M %windir%\system32\shutdown.exe /r echo 设置完成,请按任意键退出…… pause>nul