有趣的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 

 

posted on 2014-05-07 16:23  relax  阅读(3250)  评论(0编辑  收藏  举报