Windows에서 재귀 for 루프가있는 배치 파일 및 공백을 포함한 파일 이름 예일 뿐이며, 실제 경우에는 더 깊을 것이다)

나는 이와 같은 폴더 트리를 가지고있다 (이것은 단지 예일 뿐이며, 실제 경우에는 더 깊을 것이다) :

C:\test
|
+---folder1
|       foo bar.txt
|       foobar.txt
|
+---folder2
|       foo bar.txt
|       foobar.txt
|
\---folder3
        foo bar.txt
        foobar.txt

내 파일 이름에 공백이 하나 이상 있으므로 명령을 수행해야하므로 foo bar.txt에는 관심이 있지만 foobar.txt에는 관심이 없습니다.

배치 파일 내부에서 시도했습니다.

for /r test %%f in (foo bar.txt) do if exist %%f echo %%f

여기서 명령은 간단 echo합니다.
공간을 건너 뛰고 출력이 없기 때문에 작동하지 않습니다.

이것은 작동하지만 필요한 것은 아닙니다.

for /r test %%f in (foobar.txt) do if exist %%f echo %%f

다음을 인쇄합니다.

C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt

따옴표 ( “)를 사용하려고했지만 작동하지 않습니다.

for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f

따옴표가 여전히 출력에 포함되어 있기 때문에 작동하지 않습니다.

C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"


답변

이건 어때요?

for /f "tokens=* delims=" %%a in ('dir "c:\test\foo bar.txt" /s /b') do (
echo %%a
)

답변

재귀 스위치가 없으면 FOR따옴표를 인쇄하지 말라고 할 수 있습니다 .

for %%f in ("foo bar.txt") do @if exist %%f echo %~dpnxf

중첩 된 FOR명령문 을 수행 할 수 있습니다 . 외부는 디렉토리 트리를 걷고 내부는 위의 디렉토리 트리입니다.


답변

forfiles 명령을보고 싶을 수도 있습니다.

forfiles /S /M "* *" /C "cmd /C echo @PATH"

‘/ S’-재귀 모든 하위 디렉토리 검색

‘/ M “* *”‘-파일 마스크. 이름에 공백이있는 파일 만 검색하십시오.

‘/ C “cmd / C echo @PATH”‘-명령. 발견 된 모든 파일에서이 명령을 실행하십시오.

출력 예 :

"C:\test\folder1\foo bar.txt"
"C:\test\folder2\foo bar.txt"
"C:\test\folder3\foo bar.txt"

답변

플래그 f는 절대 파일 이름 witout 따옴표를 얻는 데 필요한 플래그 입니다 (따라서 필요한 경우 따옴표를 넣을 수 있습니다). 그러나 선택한 변수 이름과 충돌하기 때문에 다른 변수 이름을 사용해야합니다.

for /r test %%i in ("foo bar.txt") do echo %%~fi

답변

고마워, 데니스! 나도 거의 같은 문제를 해결하고 있었다. 디렉토리를 통해 재귀 적으로 파일 이름의 검색 문자열로 입력 매개 변수를 전달할 수있는 박쥐 파일을 원했습니다. 이것이 다른 사람에게 유용한 경우를 대비하여 여기에 있습니다.

::+++++++++
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /R %%d in (.) do (
   for /f "usebackq" %%i in (`dir /b %%d ^| findstr /i %1`) do (
      echo Processing %%i
   )
)
endlocal