2013-08-02 3 views
0

디렉토리에서 가장 최근의 파일을 찾아야합니다. 나는 최근 파일에 대해 잘 작동하는 아래의 코드를 사용했지만 내 문제는 동일한 타임 스탬프와 함께 생성 된 두 개의 파일이 있다는 것입니다. 배치 스크립트의 가장 최근 파일 찾기

  • s_dss_000GJ00I0000000000IW_9_error.csv
    1. s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv

    내 코드는 다음과 같습니다

    for /f "delims=" %%x in ('dir /od /a-d /b %1') do set recent=%%x 
    

    여기에 내가 가장 최근의 파일을 찾을 수 s_dss_000GJ00I0000000000IW_9*.csv로 % 1 % 인수를 전달하고있다. 이 코드는 가장 최근 파일을 s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv으로 반환하지만 가장 최근의 파일은 s_dss_000GJ00I0000000000IW_9_error.csv이됩니다.

    도와 주시겠습니까?

    +0

    스택 오버플로에 오신 것을 환영합니다. 곧 [About] 페이지를 읽으십시오. 전달중인 와일드 카드 표현을 감안할 때, 이름에'_8_'이 포함 된 파일은 어떻게 선택됩니까? '_9_' 파일을'_8_' 파일보다 우선 선택해야한다는 것을 어떻게 알 수 있습니까? '_9_' 대신'_10_'을 가진 파일이 있다면 어떻게 될까요? 기준은 파일의 이름 또는 타임 스탬프에 따라 결정됩니까? –

    +0

    두 개 (또는 그 이상)의 파일에 동일한 타임 스탬프가 있으면 두 개 이상이 "최근"입니다. – Endoro

    +0

    코드가 작동합니다. 명령 줄에서 다음과 같이 테스트하십시오. 'for/f "delims ="% x in ('dir/od/a-d/b s_dss_000GJ00I0000000000IW_9 * .csv ')는 @echo % x'을 테스트합니다. – Endoro

    답변

    0

    질문에 대해 확신이 들지 않습니다. 당신이 원하는 파일 이름에 알려진 문구가있는 경우,이 같은 발견으로 필터링 할 수 있습니다 :

    for /f "delims=" %%x in ('dir /od /a-d /b ^| find /i "_9_error"') do set recent=%%x 
    

    주 파이프의^수 있도록 사용합니다.

    파일에 알려진 내용이있는 경우 유사하게 find를 사용하여 사용할 내용을 파악할 수 있습니다. 파일 이름이나 내용 모두에 대해 필터링 할 항목이없고 타임 스탬프가 동일하지 않으면 문제가 발생합니다.

    +0

    파일 이름에 알려진 구문이 없습니다. _9_error는 다음 파일에 대해 동일하지 않습니다 _10_error. 이 파일은 informatica 클라우드로 자동 생성됩니다. 나는 이름을 가진 파일을 건너 뛰는 표준 루프와 최근 파일 검색을위한 for 루프를 원한다. –

    +0

    아래의 배치 파일은 내 솔루션에서 작동하지만 문제는 단지 다른 이름으로 파일을 복사하지 않는 것입니다. –

    0

    내 문제를 해결하는 배치 스크립트를 아래에 작성했습니다. 유일한 문제는 복사 명령입니다.

    다른 이름으로 파일 이름을 복사하고 싶습니다. 그게 작동하지 않습니다. 예 : s_dss_000GJ00I0000000000IW.csv를 AAA.csv로 복사해야합니다.

    @ECHO OFF 
    setlocal EnableDelayedExpansion 
    set j=0 
    SET logdirectory=C:\batchfiles\error 
    SET logdirectoryBackup=C:\batchfiles\error_processing\ 
    cd "%logdirectory% 
    
    FOR /f "delims=" %%i IN ('dir /b /a-d /o-d s_dss_000GJ00I0000000000IW*.csv') DO (
    set /A j=j+1 
    echo !j! 
    
    set tst=%%i 
    set tst=!tst:standard=! 
    if not !tst!==%%i ( 
    echo %%i contains standard 
    ) else (
    
    echo f|xcopy %%i "%logdirectoryBackup%"AAA.csv /Y 
    echo %%i not contains standard 
    
    ) 
    if !j! geq 2 (
    
        goto :end 
    ) 
    
    ) 
    :end 
    pause 
    
    관련 문제