2013-12-18 31 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

相关问题