2013-12-18 48 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代碼適用於建議的回答

@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 

pushd和popd的命令已被添加,不以處理遞歸的情況下問題(可以包含路徑),但處理不遞歸的情況,因爲路徑未包含在要用for命令處理的文件集中。

+0

它在ELSE中不起作用。我不知道爲什麼,即使插入了PAUSE,也會關閉窗口。 – Cuder

+0

@Cuder:你可以包含你的代碼,看看爲什麼? –

+0

當然,我已經做到了。 – Cuder

0

This works。如果變量爲空,那麼它將被忽略。

@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

相關問題