2011-07-27 67 views

回答

0

不確定刪除,但可以使用RoboCopy(它是Windows 7的一部分)。參數:/ MAXAGE:n會複製比n更早的文件 - 我通常會將副本複製到備份文件夾中,稍後我會確定從該目錄中刪除所有文件。

希望這會有所幫助。

3

使用~t修飾符的簡單FOR循環與SET命令返回目錄中文件的上次修改日期。

參見本實施例中

@echo off 
setlocal enabledelayedexpansion 
echo Files changed today %date% 
FOR %%A IN (*.*) DO (
    set tf=%%~tA 
    set fd=!tf:~0,10! 
    if !fd!==%date% (
    echo %%F !tf! 
) 
) 

詳細信息,請參見HELP FORHELP SET

但是,對於超出了簡單的比較,上述結果顯示比較日期時,你需要提取每個日期組件

set dd=!tf:~0,2! 
set mm=!tf:~3,2! 
set yyyy=!tf:~6,4! 

但是,等待,在一個BAT文件中提取日期組件是一個非常棘手的問題,因爲%DATE%~t修飾符使用短日期格式來格式化日期格式,這是完全(無休止地)可定製的。一個用戶可以將其系統配置爲返回Fri040811,而另一個用戶可以選擇08/04/2011。這對於BAT程序員來說是一個完整的噩夢。

一個可能的解決方案是臨時更改格式。看到這個例子。

@echo off 
echo System Date Time = %date% %time% 
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul 
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul 
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul 
echo Normalized Date Time = %date% %time% 
set dd=%date:~8,2% 
set mm=%date:~5,2% 
set yyyy=%date:~0,4% 
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul 

最後你應該做的日期算術,你需要在年月日的日期轉換爲天數,這不是很明顯都不是。這裏有一些代碼來做這個轉換。

:days 
:: Algorithm based on Fliegel-Van Flandern algorithm from the Astronomical Almanac, 
:: provided by Doctor Fenton on the Math Forum (http://mathforum.org/library/drmath/view/51907.html), 
:: and converted to batch code by Ron Bakowski. 
SET /A Month1 = (1%MM% %% 100 - 14)/12 
SET /A Year1 = %YYYY% + 4800 
SET /A days = 1461 * (%Year1% + %Month1%)/4 + 367 * ((1%MM% %% 100) - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + (1%DD% %% 100) - 32075 
SET Month1= 
SET Year1= 
goto :eof 

奇怪的成語(1%MM% %% 100)來解決問題與方法SET /A解釋爲八進制與零開頭的號碼。

所以,把所有那些拼湊...

@echo off 
setlocal enabledelayedexpansion enableextensions 

reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul 
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul 
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul 

set dd=%date:~8,2% 
set mm=%date:~5,2% 
set yyyy=%date:~0,4% 
call :days 
set /a today=!days! 

FOR %%A IN (*.*) DO (
    set tf=%%~tA 
    set fd=!tf:~0,10! 
    set dd=!fd:~8,2! 
    set mm=!fd:~5,2! 
    set yyyy=!fd:~0,4! 
    call :days 
    set /a age= !today!-!days! 
    if !age! leq 2 (
    echo %%A is !age! days old 
) 
) 
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul 
goto :eof 

:days 
:: Algorithm based on Fliegel-Van Flandern algorithm from the Astronomical Almanac, 
:: provided by Doctor Fenton on the Math Forum (http://mathforum.org/library/drmath/view/51907.html), 
:: and converted to batch code by Ron Bakowski. 
SET /A Month1 = (1%MM% %% 100 - 14)/12 
SET /A Year1 = %YYYY% + 4800 
SET /A days = 1461 * (%Year1% + %Month1%)/4 + 367 * ((1%MM% %% 100) - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + (1%DD% %% 100) - 32075 
SET Month1= 
SET Year1= 
goto :eof 
+1

不能說我很想暫時更新這樣的註冊表設置。可能導致其他正在運行的應用出現問 – Joe

+2

避免註冊表操作,請使用'wmic'。嘗試下面的命令行:'for/F「tokens = *」%G in('wmic os get localdatetime^| find「。」')do @echo =%G'。以方便的'yyyymmddhhmmss ...'格式返回系統本地日期和時間。 – JosefZ

相關問題