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

标签 windows batch-file

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

批处理文件运行方式

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

最佳答案

原因是 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
)

关于windows - 批处理脚本循环以检查多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153339/

相关文章:

windows - 如何保护 SQLite 数据库?

windows - 在 Windows 批处理中检查空变量

batch-file - 设置 cmd.exe/V :ON flag without starting new instance

php - 如何在 codeigniter xampp 窗口中从本地主机发送电子邮件

batch-file - 设置命令批量崩溃?

java - 批处理 - 从属性文件读取文件路径时出错

batch-file - 使用 robocopy 提示源/目标的批处理文件

windows - PowerShell:(ConvertTo-* | Set-Content) 和 (Export-*) 之间的区别?

windows - 无法使用 VMware windows 7 作为主操作系统和 centOS 6 作为 guest 同步共享文件夹

c++ - 光电鼠标作为编码器