批处理脚本循环以检查多个参数

时间:2012-06-22 09:13:54

标签: windows batch-file dos

好的,我一直在玩这个,但无法让它为每个参数运行命令。

批处理文件以

运行
test.bat /r /a /c

完整批代码

@echo on
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

:checkloop
set argtoken=1
FOR /F "Tokens=* delims=" %%G IN ("%*") DO (call :argcheck %%G)
pause
GOTO:END


:argcheck
if /i "%1"=="/r" set windows=1
if /i "%1"=="/a" set active=1
goto:eof

:end

“%*”显示所有参数,例如

/r /a /c

但出于某些原因,无论我尝试什么,我都无法让for循环分解不同的参数并为每个参数运行:argcheck

更新: 对于任何对此感兴趣的人都是我最终的结果。我正在用几个不同的脚本实现它,它的工作很棒。只需将其放在脚本中的某个位置,使用调用函数和“%​​”就可以了。 :)如果您有任何问题,请发布。

@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

call:ArgumentCheck %*
echo %DebugMode%
echo %RestartAfterInstall%
pause
goto:eof

:ArgumentCheck
if "%~1" NEQ "" (
    if /i "%1"=="/r" SET DebugMode=Yes & GOTO:ArgumentCheck_Shift
    if /i "%1"=="/a" SET RestartAfterInstall=Yes & GOTO:ArgumentCheck_Shift
    SET ArgumentCheck_Help=Yes
    :ArgumentCheck_Shift
        SHIFT
        goto :ArgumentCheck
)
If "%ArgumentCheck_Help%"=="Yes" (
    Echo An invalid argument has been passed, currently this script only supports
    ECHO /r /a arguments. The script will continue with the arguments 
    ECHO you passed that is supported.
)
GOTO:EOF
:end

1 个答案:

答案 0 :(得分:10)

原因是FOR / F会将一行拆分为一个名为%% A,%% B,%%的标记的固定计数...(%% A这里是第一个命名的标记)。
但是当你使用空delims=时,即使这样也行不通。

FOR /F "tokens=1-5 delims= " %%A in ("%*") do (
  echo %%A, %%B, %%C, %%D, %%E
)

这会将你的行分成标记,但它甚至会分割像

这样的标记
One "two and three"

输出:

One, "two, and, three",

使用SHIFT和循环更容易。

:loop
if "%~1" NEQ "" (
  call :argcheck
  SHIFT
  goto :loop
)