gpt4 book ai didi

batch-file - 通过类似开关的参数循环的批处理文件?

转载 作者:行者123 更新时间:2023-12-04 02:40:11 24 4
gpt4 key购买 nike

我正在尝试遍历我传递给批处理文件的参数。根据参数,我想设置一个变量标志 true 或 false 以供稍后在脚本中使用

所以我的命令是“myscript.bat/u/p/s”

我的代码是:

FOR /f %%a IN ("%*") DO (
IF /I "%%a"=="/u" SET UPDATE=Y
IF /I "%%a"=="/p" SET PRIMARY=Y
IF /I "%%a"=="/s" SET SECONDARY=Y
)

它仅在我有一个参数时才有效,这告诉我它将整个参数列表作为单个参数获取。我试过“delims=”但无济于事。关于获得每个间隔参数的任何想法?

向其中一个参数添加一个值怎么样?

myscript.bat/u/p/d 测试/s
:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
IF /I "%~1"=="/d" SHIFT & SET DISTRO="%~1"
SHIFT & GOTO loop

:cont

但是与最后一个 IF 内联的 SHIFT 实际上并没有改变任何东西。 DISTRO 最终成为“/d”而不是“TEST”

最佳答案

您可以使用 SHIFT、GOTO 和额外的 IF 来循环参数,以检查是否没有更多参数需要解析:

:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
SHIFT & GOTO loop

:cont
...

更新 (解决参数有自己的参数的情况)

检查 /d 的 IF 语句中的 SHIFT确实有效。问题是整行都被立即评估,并且 %~1 的两个实例都被评估。被替换为相同的值,即 /d在那时候。

因此,基本上在这种情况下的解决方案是让解释器评估 SET DISTRO="%~1"部分与 IF /I "%~1"=="/d" 分开.对此可以有多种方法。例如,您可以简单地移动 SHIFT & SET DISTRO="%~1"如果 %~1 到下一行并跳过它不是 /d :
...
IF /I NOT "%~1"=="/d" GOTO skip_d
SHIFT & SET "DISTRO=%~1"
:skip_d
...

另一种方法是为 ? 分配一个特殊值(例如 DISTRO)和转移时 /d遇到了。然后,在下一行,检查是否 DISTRO具有该特殊值并将其设置为 %~1 :
...
IF /I "%~1"=="/d" SHIFT & SET DISTRO=?
IF "%DISTRO%"=="?" SET "DISTRO=%~1"
...

关于batch-file - 通过类似开关的参数循环的批处理文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com