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