Windows 如何为命令行参数创建变量?
我有一个.bat文件,它对文件夹中的文件执行一些操作。但在此之前,它会询问用户是否也在子文件夹中执行这些操作。之后,脚本将变量%recursive%的值设为/r或空,具体取决于用户键入的内容,并按如下方式运行命令:Windows 如何为命令行参数创建变量?,windows,batch-file,Windows,Batch File,我有一个.bat文件,它对文件夹中的文件执行一些操作。但在此之前,它会询问用户是否也在子文件夹中执行这些操作。之后,脚本将变量%recursive%的值设为/r或空,具体取决于用户键入的内容,并按如下方式运行命令: for %recursive% %folder% ... 当然,它不起作用。我不能为命令创建两个FOR(带递归参数和不带递归参数),因为它们内部都有相同的代码。 你建议我做什么? 提前谢谢 代码是: :LoopStart set /p recursive="Including su
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
)
编辑-适用于建议答案的操作代码
@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命令处理的文件集中。这是有效的。如果变量为空,则将忽略它
@echo off
set "recursive="
call :code
set recursive=/r
call :code
goto :eof
:code
for %recursive% %%a in (*) do echo %%a
pause
它在其他地方不起作用。我不知道为什么,它会关闭窗口,即使在插入“暂停”时也是如此。@Cuder:您将目录保留在“for”行中的“for non recursive”选项中,这是不允许的。请参阅更新的答案。这在递归或非递归情况下处理问题。如果您决定不更改目录,那么对于非递归的情况,文件的路径应该包含在for文件集中,类似于
for%%f in(“c:\*.*”d:\where\*.txt”)
是的。测试上述脚本。
@echo off
set "recursive="
call :code
set recursive=/r
call :code
goto :eof
:code
for %recursive% %%a in (*) do echo %%a
pause