이 일괄 처리 프로세스에서 모든 하위 폴더를 검색하는 데 와일드카드가 누락되었습니까?

이 일괄 처리 프로세스에서 모든 하위 폴더를 검색하는 데 와일드카드가 누락되었습니까?

저는 인터넷에서 스크립트 조각을 가져와 하나의 상위 폴더 아래에 있는 모든 폴더를 검색하고 특정 파일을 찾아 새 위치에 복사하는 무언가를 구축했습니다. (우리는 끝없이 비어 있고 점유된 폴더가 있는 디렉토리를 가지고 있으며 수동으로 검색하지 않고 소수의 파일을 찾으려고 합니다.)

지금까지는 스크립트가 작동하지만 이름이 지정된 파일(Names.txt 문서에 있음)이 상위 폴더(...\source) 바로 아래에 있는 경우에만 작동합니다. 상위 폴더(...\source\folder1\folder2\etc) 내의 폴더 내에 있으면 검색되지 않으며 아무 것도 나오지 않습니다. 내가 무엇을 놓치고 있나요?

@echo off
pushd C:\Users\username\Desktop\TestBatches
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type Names.txt') do xcopy /hrkvy "%SourceFolder%\%%a" ".\destination"
popd
pause

소스 경로를 입력할 때 명령 프롬프트에 와일드카드를 입력합니까? 아니면 자동으로 이 작업을 수행할 수 있는 항목을 배치에 추가해야 합니까?

나는 조금 길을 잃었다. 도와 주셔서 감사합니다!

답변1

여기서는 몇 가지 고급 배치 개념을 바로 안내해 드리겠습니다.
다음 예에서는 배치를 사용하고 있습니다.기능이 임무를 완수하기 위해. 이것은 목표를 달성하는 가장 효율적인 방법은 아니지만 당신이 어떤 일을 하는지 보여줄 것입니다.할 수 있다하다. 나는 여전히 매우 피곤하므로 이 해결책은 어리석은 해결책일 수 있습니다(그러나 작동합니다).

이 길을 가지 않더라도 아마 "dir /s /b FILEMASK"당신이 찾고 있던 것이었어요.

@echo off
:: This assumes that this batch is in the same folder as Names.txt and the .\destination folder
:: This batch DOES NOT check things it should like the existence of %SourceFolder% or if .\destination even exists
Set ThisDir=%~DP0
Set DestinationDir=%ThisDir%\destination
Set NamesFile=%ThisDir%\Names.txt
Set /p SourceFolder=Enter the path of source folder and press [Enter]:
for /f "delims=" %%a in ('type %NamesFile%') do call :SearchName "%%a"
pause
goto :EOF

:: ----------------------------------------------------------------
:SearchName
pushd %SourceFolder%
for /f "delims=" %%f in ('dir /s /b %1') do call :FoundFile "%%f"
popd
goto :EOF

:: ----------------------------------------------------------------
:FoundFile
xcopy /hrkvy "%1" "%DestinationDir%"
goto :EOF

첫 번째 for 루프는 함수 호출만 수행합니다.:검색이름텍스트 파일의 각 이름에 대해.

그만큼:검색이름함수는 "Set /p"에 의해 지정된 디렉토리로 전환하고 "dir /s /b NAME_PASSED_FROM_TEXT_FILE"을 수행합니다. 찾은 파일(찾은 파일)을 다음 라인으로 펌핑합니다.:찾은파일기능.

그만큼:찾은파일함수는 전달된 파일을 복사합니다.

관련 정보