2011-07-27 2 views
4

도움이 필요하십니까? 특정 폴더의 파일을 확인하는 데 2 ​​일이 넘는 타임 스탬프가있는 경우 어떻게 삭제하거나 삭제하거나 다른 위치로 복사합니까?Windows 배치 스크립트에서 파일의 타임 스탬프 생성을 확인하려면 어떻게합니까?

+0

이 질문은 serverfault – onof

+0

에 속하며 작성 타임 스탬프 또는 수정 타임 스탬프를 의미합니까? –

+0

@onof, IMO 이것은 박쥐 파일 프로그래밍에 관한 질문입니다. –

답변

0

삭제가 확실하지 않지만 RoboCopy (Windows 7의 일부 임)를 사용할 수 있습니다. 매개 변수 :/MAXAGE : n은 n보다 오래된 파일을 복사합니다. 일반적으로 사본을 백업 폴더에 저장하고 나중에 해당 디렉토리에서 "삭제"를 수행합니다.

희망이 도움이됩니다.

3

~t 수정자를 사용하는 SET 명령을 사용하는 단순한 FOR 루프는 디렉토리의 파일의 최종 수정 날짜를 반환합니다.

@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을 반환하도록 시스템을 구성 할 수 있으며 다른 사용자는 2011 년 8 월 4 일을 선택할 수 있습니다. 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 

그리고 마지막으로 당신이 날짜로 연산을 수행해야합니다, 당신도 명확하지 않다 일수로 DD의 MM의 YYYY에 날짜를 변환해야합니다. 이 변환을 수행하는 몇 가지 코드가 있습니다. 0으로 시작하는 숫자를 8 진수로

: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 해석을 문제를 해결하는 데 사용됩니다. 그것을 할 것입니다 cmd를에 다음 명령을

함께 모든 조각을 넣어 너무

, ...

@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 "토큰 = *"% G in ('wmic os get localdatetime^| find "."') do @echo = % G'. 편리한 yyyymmddhhmmss ... 형식으로 시스템 로컬 날짜 및 시간을 반환합니다. – JosefZ