我有一个.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
)
答案 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