2013-12-18 1 views
0

폴더에있는 파일로 일부 작업을 수행하는 .bat 파일이 있습니다. 그러나 이전에는 하위 폴더에서도 이러한 작업을 수행할지 여부를 사용자에게 묻습니다. 그 후 스크립트는 사용자가 입력 한 내용에 따라 값/R 또는 빈과 변수 % 재귀 %를 가지고 있으며, 그와 같은 명령을 실행 :명령 줄 인수에 대한 변수를 만드는 방법은 무엇입니까?

for %recursive% %folder% ... 

그것은 물론 작동하지 않습니다. 둘 다 동일한 코드를 내부에 가지고 있기 때문에 두 개의 FOR 명령 (재귀 매개 변수가있는 경우와없는 경우)을 만들 수 없습니다. 내가 무엇을 제안하겠습니까? 미리 감사드립니다.

코드는 다음과 같습니다

:LoopStart 
set /p recursive="Including sub-folders? [y] or [n]: " 
IF /I "%recursive%"=="y" (
    set "myFOR=for /r" 
    GOTO :LoopEnd 
) ELSE (
    IF /I "%recursive%"=="n" (
     set "myFOR=for" 
     GOTO :LoopEnd 
    ) ELSE (
     GOTO LoopStart 
     ) 
    ) 
:LoopEnd 
%myFOR% %img_dir% %%i in (*.jpg,*.emf,*.png,*.jpeg,*.gif) do (
    echo This is file %%~nxi 
) 

답변

2
... the ask for recursive has been done ... 
... 
if defined recursive (
    set "myFOR=for /r %folder%" 
) else (
    set "myFOR=for" 
) 
%myFOR% %%f in (.... 

편집 - OP 코드의 pushd와 popd의 명령이 재귀의 경우 문제를 처리하지, 추가 된

@echo off 
    setlocal 

    set "img_dir=d:\temp" 

:LoopStart 
    set /p "recursive=Including sub-folders? [y] or [n]: " 

    IF /I "%recursive%"=="y" (
     set "recursive=/r" 
    ) ELSE IF /I "%recursive%"=="n" (
     set "recursive=" 
    ) ELSE (
     GOTO LoopStart 
    ) 

    pushd "%img_dir%" 
    for %recursive% %%i in (*.jpg,*.emf,*.png,*.jpeg,*.gif) do (
     echo This is file %%~fi 
    ) 
    popd 

endlocal 

제안 된 답변에 적응 (여기서 경로는 포함될 수 있지만) 경로는 for 명령으로 처리 될 파일 세트에 포함되어 있지 않으므로 재귀가없는 경우를 처리해야합니다.

+0

ELSE에서는 작동하지 않습니다. 이유를 모르겠다. PAUSE가 삽입 되더라도 창을 닫는다. – Cuder

+0

@Cuder : 이유를 보려면 코드를 포함 할 수 있습니까? –

+0

그래, 내가 해냈어. – Cuder

0

이것은 작동합니다. 변수가 비어 있으면 무시됩니다.

@echo off 
set "recursive=" 
call :code 
set recursive=/r 
call :code 
goto :eof 

:code 
for %recursive% %%a in (*) do echo %%a 
pause 
+0

안타깝게도 안돼 ... – Cuder

+0

예. 위의 스크립트를 테스트하십시오. – foxidrive

관련 문제