2011-07-27 43 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

相关问题