Windows 배치 스크립트를 사용하여 파일 목록에서 일치하는 파일 이름으로 네트워크 파일 복사


0

하나는 특정 키워드를 포함하고 다른 하나는 경로 목록을 포함하는 2 개의 파일이 있습니다. 첫 번째 파일 목록에서 파일 경로 목록으로 키워드를 검색하고 찾은 경우 지정된 파일 경로에서 특정 대상 폴더로 파일을 복사합니다.

첫 번째 파일 내용

Keyword1
Keyword2
Keyword3
Keyword4

두 번째 파일 내용

\\server\path...\Keyword1.txt
\\server\path...\Keyword1_0_1.txt
\\server\path...\Keyword2_0_1.txt
\\server\path...\Keyword2_1_9.txt
\\server\path...\Keyword3_1_0_1.txt

이 목적으로 Windows 배치 스크립트를 작성해야합니다.

===================================================== ==========

죄송합니다 @ pimp-juice-it 스크린 샷을 붙여 넣는 방법을 잘 모르겠습니다. 따라서 아래에 출력을 복사하여 붙여 넣습니다.

d : \ Temp_Script \ Script> FOR / R "D : \ Temp_Script \ Source \ 33.txt"% G IN (55 *) DO ECHO "55"d : \ Temp_Script \ Script> CALL : FileExist "55" "D : \ Temp_Script \ Source \ 44.txt "d : \ Temp_Script \ Script> FOR / R"D : \ Temp_Script \ Source \ 44.txt "% G IN (55 *) DO ECHO"55 "d : \ Temp_Script \ Script> 호출 : FileExist "55" "D : \ Temp_Script \ Source \ 55.txt"d : \ Temp_Script \ Script> FOR / R "D : \ Temp_Script \ Source \ 55.txt"% G IN (55 *) DO ECHO " 55 "d : \ Temp_Script \ Script> CALL : FileExist"55 ""D : \ Temp_Script \ Source \ 55-복사 (2) .txt "d : \ Temp_Script \ Script> FOR / R"D : \ Temp_Script \ Source \ 55-복사 (2) .txt "% G IN (55 *) DO ECHO"55 "d : \ Temp_Script \ Script> CALL : FileExist"55 ""D : \ Temp_Script \ Source \ 55-Copy.txt "

UNC에 키워드 "55"가 있지만 FOR 루프에서 조건이 True로 확인되지 않고 다음 UNC로 직접 이동합니다. 아래는 코드입니다-

: FileExist FOR / R "% ~ 2"%% G IN (% ~ 1 *) DO ECHO "% ~ 1"


일괄 처리 대신 다른 것을 사용하는 것이 좋습니다. 이러한 파일 중 하나는 두 번째 줄에있는 행 수만큼 읽어야합니다. PS. 예를 들어 VBS 스크립트를 사용하십시오.
Akina

답변:


0

당신은 "키워드"목록을 반복 한 번에 할 수 있고 검색 문자열이 일부 동봉 와일드 카드 문자와 함께 반복 키워드 값을 사용합니다 *<Keyword>* . 파일 목록에서 각 UNC 경로 값의 디렉토리 트리를 탐색하고 검색 문자열 "키워드"와 일치하는 디렉토리 만 복사 작업을 수행 할 수 있습니다.

본질적으로 ...

  • 첫 번째 for / f 루프는 문자열 파일 목록의 각 행을 하나씩 읽고 각 행의 값은 첫 번째 인수에서 호출 명령에 전달되는 반복 된 값입니다 .
  • 두 번째 for / f 루프는 UNC 경로 파일 목록의 각 행을 하나씩 읽고 이를 호출 명령을 사용하여 두 개의 인수로 / f 루프 의 첫 번째 인수 값을 전달합니다 .
  • 마지막 for / r 루프는 반복 된 문자열 값을 사용하여 반복 된 UNC 경로를 전달 된 별도의 인수로 재귀 적으로 검색 한 다음 일치하는 모든 파일을 복사합니다.

배치 스크립트

@ECHO ON

SET "strList=\\server\Folder\Path\SearchStrings.txt"
SET "pathList=\\server\Folder\Path\UNCPaths.txt"
SET "targetPath=\\server\target\folder\path"

FOR /F "USEBACKQ TOKENS=*" %%S IN ("%strList%") DO CALL :Paths "%%~S"
PAUSE
EXIT

:Paths
FOR /F "USEBACKQ TOKENS=*" %%P IN ("%pathList%") DO CALL :FileExist "%~1" "%%~P"
GOTO :EOF

:FileExist
FOR /R "%~2" %%C IN (*%~1*) DO XCOPY /F /Y "%%~C" "%targetPath%\"
GOTO :EOF

추가 자료

  • / F

  • 요구

    CALL 명령은 지정된 매개 변수와 함께 지정된 레이블 다음에 명령문에 제어를 전달합니다. 서브 루틴을 종료하려면 GOTO:eof현재 서브 루틴의 끝으로 제어를 전송합니다.

  • / R

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    
        Walks the directory tree rooted at [drive:]path, executing the FOR
        statement in each directory of the tree.  If no directory
        specification is specified after /R then the current directory is
        assumed.  If set is just a single period (.) character then it
        will just enumerate the directory tree.
    

Sujitkar - 그냥 제거 PAUSE그래서 것입니다 exit할 때를하지만 필요에 따라 사용자의 특정 요구에 따라 조정. 필요한 경우 조정에 도움을 줄 수 있으므로 설명하고 알려주십시오.
Pimp Juice IT

@ pimp-juice-it와 같은 자세한 솔루션에 감사드립니다. 그러나 FOR / R "% ~ 2"%% C IN ( % ~ 1 )에서 작동하지 않습니다. 이 조건은 True를 반환하지 않습니다.
Sujitkar

@Sujitkar-몇 번 반복하여 스크린 샷이나 명령 출력을 보내거나 몇 줄을 보낼 수 있습니까? 어쩌면 내가 당신의 설정으로 오해 한 것이있을 수 있으므로 이해하는 데 도움이된다면 여전히 귀하의 요구에 맞게 작동하도록 조정할 수 있습니다.
Pimp Juice IT

@Sujitkar 또한, 아마도 잘못된 것으로 가정하지만 예를 들어 Keyword1파일에 파일 이름이없는 UNC 서버 경로 \\server\path...가있는 경우 Keyword1원하는 경로에 문자 가있는 파일 이름이 있어야합니다 그것을 복사 존재. 이 방법을 사용하는 UNC 경로 파일 목록에는 키워드가있는 파일 이름과이 경로 만 사용할 수 있습니다. UNC 경로 파일 목록에 UNC 폴더 경로 목록 만있는 경우 작동하지 않는 것 같습니다.
Pimp Juice IT

@Sujitkar이 답변과 위의 질문 사이에 몇 가지 의견을 남겼으므로 모든 내용을 읽었는지 확인할 수 있는지 확인하고 싶을 때 궁금한 점이 있습니까? 이 간단한 작업을 해결하도록 도와 드리고자합니다. 목록에서 확인하고 더 잘 이해하고 동시에 조금 배울 수 있습니다. 더 잘 이해하고 /하거나이 간단한 과제를 해결하기 위해 내가 할 수있는 일을 알려주십시오.
Pimp Juice IT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.