批处理文件 – 循环的批处理文件通过类交叉转换参数?
我试图循环我传递给批处理文件的参数.基于这个参数,我想设置一个变量标志为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" ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 找到点下面的所有窗口
- Windows DFS如何为远离办公室的笔记本电脑工作?
- 具有类似rc的文件的PowerShell配置
- windows-server-2008 – 双跃点窗口认证
- windows-8 – datetimepicker绑定问题
- windows-phone-7 – 当应用程序暂停时,对AudioPlayerAgent中
- wix – 当MSI日志文件显示“Note:1:2729”时,它是什么意思
- windows-mobile – 使Windows Mobile设备模拟蓝牙HID设备
- windows-server-2003 – 免费的Windows服务器防病毒和防火墙
- win10和Ubuntu双系统安装过程中遇到的问题