如何为命令行参数创建变量?

时间:2013-12-18 09:57:33

标签: windows batch-file

我有一个.bat文件,它对文件夹中的文件执行一些操作。但之前,它会询问用户是否也在子文件夹中执行这些操作。之后,脚本具有变量%recursive%,值为/ 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 个答案:

答案 0 :(得分: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命令处理。

答案 1 :(得分:0)

这很有效。如果变量为空,那么它将被忽略。

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

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