2010/12/06

batch file + VBS 刪除 目錄下 五天以前的所有檔案

batch file + VBS 刪除 目錄下 五天以前的所有檔案
用 VBS 找出 五天前的日期, 並輸出 yyyymmdd 格式
用 batch file 找出目錄下 所有檔案的日期 並與 VBS輸出的日期做比較
預設 5日, 可另下參數更改日期

<file 1: 5day.vbs 找出 五日前的日期>
days = 5 '// 5 days ago
Set ArgObj = WScript.Arguments
if (ArgObj.Count>0) then days = ArgObj(0)
x=DateAdd("d",-days,date)
'//x="2009/9/7"
'//OriginalLocale = GetLocale
'//WScript.StdOut.Write DateAdd("d",-60,date)
'//WScript.Echo FormatDateTime(x,"%Y/%m/%d")
WScript.Echo year(x) & "/" & right("0" & month(x),2) & "/" & right("0" & day(x),2)


<file 2: 5day.bat 刪除 目錄下五日前的所有檔案>
@echo off
echo off
rem 2009/12/10
rem Delete files in PATH1 & PATH2 for 5 days ago
set days=5
set TMP_PATH=\_DEL\
set PATH1=c:\x\
rem set PATH2=c:\x2\
cd %PATH1%
del /F/S/Q %TMP_PATH%
rmdir %TMP_PATH%
mkdir %TMP_PATH%
if not "c%1"=="c" set days=%1
:start
FOR /f %%x in ('C:\windows\system32\cscript.exe /Nologo 5day.vbs %days%') do for %%y in (%PATH1%\*.*) do if %%~ty LSS %%x (echo %%y
move "%%y" %TMP_PATH%)
if not "c%PATH2%"=="c" FOR /f %%x in ('C:\windows\system32\cscript.exe /Nologo 5day.vbs %days%') do for %%y in (%PATH2%\*.*) do if %%~ty LSS %%x (echo "%%y"
move "%%y" %TMP_PATH%)
set PATH1=
set PATH2=
set TMP_PATH=


XP後的 cmd 支援 FOR /f 用法,
先將 vbs 輸出的 五日前的日期 儲存在 %x 變數中,
再多用一個 %y 去抓取該目錄下所有檔案,
並用 %~ty 抓出該檔案時間,
用 LSS 比較'數字'大小,來決定刪除與否!

沒有留言:

張貼留言