批处理文件 – 循环的批处理文件通过类交叉转换参数?

前端之家收集整理的这篇文章主要介绍了批处理文件 – 循环的批处理文件通过类交叉转换参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图循环我传递给批处理文件的参数.基于这个参数,我想设置一个变量标志为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 TEST / 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
...

UPDATE(解决参数具有自己参数的情况)

检查/ d的IF语句中的SHIFT是否正常工作.问题是整个行被一次评估,并且%〜1的两个实例都被替换为相同的值,这是/ d.

因此,在这种情况下,解决方案基本上是使解释器与IF / I“%〜1”==“/ d”分开地评估SET DISTRO =“%〜1”部分.可以有各种方法.例如,你可以简单地移动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"
...
原文链接:https://www.f2er.com/windows/363848.html

猜你在找的Windows相关文章