2010-12-19 2 views
0

이 포럼에서 멋진 글을 읽었으며 내가하고 싶은 일에 가까워졌지만 정확한 코드를 파악할 수 없었습니다.텍스트 파일의 광고 항목을 기반으로 반복 검색을 수행하는 일괄 파일

  • aa는 특정 디렉토리
  • 에서 파일을 찾을 수있는 텍스트 파일의 각 라인 항목에 대한 루프 검색을 (이 키워드의 목록입니다) 수행

    나는 다음을 수행하기 위해 윈도우 배치 파일을 만들려면

  • 이 검색에서는 부분 일치가 괜찮습니다.

감사 : (\ 임시 \의 search_results 예를 들어, C)

  • 파일을 찾을 때마다, 미리 정의 된 디렉토리로 이동합니다.

  • +0

    일괄 적으로 수행 할 수 있지만 더 유연한 Windows (예 : AWK)로 이식 된 무료 유닉스 유틸리티를 사용할 수 있습니다. –

    +0

    I 코드에서 문제가 보이지 않습니다. 아마도 당신은 뭔가를 시도해야합니다. – jeb

    답변

    0

    여러 가지 문제가 있습니다.

    FIND/i를 "% %가"... %%되면, FOR-Varibale의 이름을 작동하지 않을 수있는
    그리고 두 번째 proble : 파일 이름이 아닌 내용을 확인 FIND로 . 너무 큰 괄호를 피하려면 들여 쓰기를 사용해야합니다.

    당신은 더 나은

    FOR /F "tokens=*" %%A IN (%listfile%) DO (
        FOR %%f in (%searchdir%\*) do ( 
         set "filename=%%~f" 
         set replaced=!filename:%%A=! 
         if !replaced! NEQ !filename! (
          echo !filename! contains '%%A' 
         ) 
        ) 
    ) 
    

    그것은과 파일 이름의 내부를 %% 대체하려고 시도합니다. 대체 된 파일 이름이 파일 이름과 같지 않으면 파일 이름에 %% A를 포함해야합니다.

    +0

    Jeb 감사합니다. 이것은 나를 많이 돕는다. 나는 문자열을 파일 이름과 어떻게 비교하는지 정말 좋아한다. 이제 기준 문자열의 다양한 변형을 가지고 게임해야합니다. 예 : 파일의 광고 항목이 "Stephen King"이고 파일 이름의 변형은 다음과 같을 수 있습니다. - Stephen King - King Stephen - Stephen_King 등 모든 변형을 캡처하려고합니다. 다시 한번 감사드립니다. – Tulga

    +0

    문자열 "Stephen King"을 토큰 "Stephen"과 "King"으로 분리하고 모든 토큰이 파일 이름에 존재하는지 테스트 할 수 있습니다 – jeb

    1

    저는 현재 Windows를 사용하고 있지 않으므로 해결책이 아닌 몇 가지 아이디어 만 게시 할 수 있습니다.

    1) for /f을 사용하여 파일 내용을 반복합니다.

    2) find "%Keyword%" %SourceDir%을 사용하여 일치하는 파일 목록을 가져옵니다. find의 출력에서 ​​파일 이름을 구문 분석해야합니다.

    2A)의 대안으로, 중첩 된 for와 소스 디렉토리에있는 파일을 (반복 가능) 및 파일 일치 여부 (출력을 폐기하고 결정하는 종료 코드 (%ERRORLEVEL%)를 사용하여, 각 파일에 대해 find를 호출 그것을 일치하는 항목이 있으면 0을, 일치하는 항목이 없으면 0이 아닌 값을 반환합니다. 이런 식으로 뭔가가 :

    for %%F in (%SourceDir%\*) do (
        find "%Keyword%" %%F > nul 
        if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match) 
    ) 
    

    3) move과 일치하는 파일을 이동합니다.

    0

    다음 코드를 작성했지만 올바른 경로에 있는지 확실하지 않습니다. 여기 내 설정은 다음과 같습니다 List.txt 파일 파일 내용 (파일 이름 검색에 대한 내 키워드)이다 -

    one 
    two 
    five 
    ten 
    six 
    

    F1 폴더에 포함 된 -

    four.txt 
    one.txt 
    three.txt 
    

    내가 F2에 일치하는 사람을 이동하려면 폴더,하지만 코드 단순 대신 에코를 사용하고 있습니다.

    내 코드는 다음과 같습니다

    @ECHO OFF 
    SETLOCAL EnableDelayedExpansion 
    
    
    SET listfile=D:\batchtest\list.txt 
    SET searchdir=D:\batchtest\f1 
    
    FOR /F "tokens=*" %%A IN (%listfile%) DO (
    
    FOR %%f in (%searchdir%\*) do (FIND /i "%A%" %%f 
        if errorlevel 1 (
    echo Search failed) else (
    echo Search successful 
    ) 
    ) 
    ) 
    ) 
    

    그것은 실행하지만 일치하는 파일 이름을 찾을 수 없습니다.

    감사합니다.

    관련 문제