2011-09-26 70 views
0

我試圖刪除一分鐘以下的.zip,.jpg和.txt文件。我還沒有添加文件類型。稍後再詳細介紹。但這似乎並沒有刪除任何東西。歡迎任何幫助。這是在Windows中。批量刪除小於一分鐘的文件舊

@echo off 
cd "c:\*\*" 
setlocal 
call :DateToMinutes %date:~-4% %date:~-10,2% %date:~-7,2% %time:~0,2% %time:~3,2% NowMins 
for /f "delims=" %%a in ('dir * /a-d /b') do call :CheckMins "%%a" "%%~ta" 
goto :EOF 
:CheckMins 
set File=%1 
set TimeStamp=%2 
call :DateToMinutes %timestamp:~7,4% %timestamp:~1,2% %timestamp:~4,2% %timestamp:~12,2% % timestamp:~15,2%%timestamp:~18,1% FileMins 
set /a MinsOld=%NowMins%-%FileMins% 
if %MinsOld% leq 1 del %file% 
goto :EOF 
:DateToMinutes 
setlocal 
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5 
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) 
set /a dd=100%dd%%%100,mm=100%mm%%%100 
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 
if 1%hh% LSS 20 set hh=0%hh% 
if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88 
if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00 
if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2% 
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn 
endlocal&set %6=%j%&goto :EOF 
+0

永遠不要運行在它DELETE命令的任何BAT文件沒有經過全面的測試。我的建議總是使用ECHO DELETE。 –

回答

1

首先,你的腳本不適合我,因爲它依賴於日期和時間格式,對我來說是:

c:\>echo %date% 
Tue 27/09/2011 

c:\>echo %time% 
9:52:31.68 

這且不說,分析哪些是暫時回事在頂部註釋掉@echo。

我已經編輯你的腳本來處理我的日期格式,我可以看到兩個問題:

  1. 在通過F中的第五個參數的雜散白色空間(儘管這可能只是一個剪切和粘貼問題);和
  2. 你迭代通過目錄的方式。 ('dir/ad/b/sc:\')/ f「delims =」%% a do:call CheckMins 「%%一個」「%%〜た」

由於PA在評論中說,目前在更好的答案:How can I check the time stamp creation of a file in a Windows batch script?

+0

謝謝理查德,我很樂意傾聽。我認爲代碼正在變成一隻熊!我認爲它的最佳做法是更簡單,更簡單。任何幫助表示讚賞。在這一點上,我還是有點新,如果不是一定會困惑和討厭的話! –

+0

我收回了它,現在我更仔細地查看了你的代碼,它看起來像算法正確處理了閏年。對不起,半翹着。我會繼續尋找並回復你。 –

+0

我已經編輯了我的答案,現在我已閱讀並進行了實驗。我喜歡你使用過的技術,獲取文件時間戳,以及返回值隧道傳遞返回變量名稱作爲最終參數。 –