Windows 일괄 FOR 루프에서 전체 경로를 보장하는 방법

Windows 일괄 FOR 루프에서 전체 경로를 보장하는 방법

디렉터리 내용을 반복하고 각 항목에 대해 명령을 호출할 수 있는 일반 배치(또는 Windows 명령) 파일을 만들었습니다.

IF a%1==a ( set _DIR="%CD%") ELSE ( set _DIR="%~1")
IF a%2==a ( set _COMMAND=rem) ELSE ( set _COMMAND=%2)
IF a%3==a ( set _FILTER=*.*) ELSE ( set _FILTER=%3)
set _OPTS=%4

FOR /F "delims=" %%f IN ('dir %_DIR%\%_FILTER% %_OPTS% /b') DO (
%_COMMAND% "%%f"
)

%_COMMAND%하지만 올바른 파일을 호출하는지 확인하는 방법을 결정하려고 합니다 .

와 같이 디렉터리 변수를 앞에 추가하려고 시도했지만 %_COMMAND% %_DIR%\"%%f"전달한 매개 변수에 따옴표가 남습니다. 예를 들어 배치 파일을 호출 exec_dir.bat하고 다음을 사용하여 호출하면 실행 echo_test.bat시 모든 파일에 따옴표가 있는 것을 볼 수 있습니다 echo_test.bat.

echo %~dpn1.mp4

해당 배치 스크립트는 다음을 생성합니다.

> exec_dir.bat "C:\Users\User\Desktop\Test Folder" echo_test.bat *.txt
C:\Users\User\Desktop\Test Folder\"Test File.txt
C:\Users\User\Desktop\Test Folder\"Test2.txt

내 생각에는 이스케이프 문자와 관련이 있는 것 같지만 \해결할 수 없는 것 같습니다.

답변1

세트로컬
if "%~1"=="" (dir=.로 설정) else (dir="%~1"로 설정)
if "%~2"=="" (명령어=echo 설정) else (명령어=%~2 설정)
if "%~3"=="" (마스크=* 설정) else (마스크=%~3 설정)
for /r %dir% %%f in (%mask%) do %command% %%~dpnxf

또는 간단하게:

C:\> /r 의 경우. (*)의 %f는 @echo %~dpnxf를 수행합니다.

관련 정보