有没有办法逃避for循环中的问号,以便以下方法有效?
for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)
它会比单独的if更干净。在单独的if子句中%% a == / ^?有效,但不在这里。
答案 0 :(得分:3)
没有办法保留外卡*?在FOR(no / F)命令中,唯一的方法是通过FOR / F。请注意,在这种情况下,两者 FOR中存在问题,因此此解决方案也不起作用:
for %%a in (%*) do (
if %%a == /? goto usage
if %%a == /h goto usage
. . . .
)
...当然,除非那个/?参数未给出。
尽管可以组装一个循环来迭代包括/?在内的几个开关,但结果代码比单独的IF更复杂。您可以尝试使用此解决方案:
setlocal EnableDelayedExpansion
set params=%*
if "%params:/?=%" neq "%params%" goto usage
for %%b in (/h /help -h -help --help) do if "!params:%%b=!" neq "%params%" goto usage
答案 1 :(得分:0)
除了" params" %*为空时解决方法失败:如果前缀为%*,则为Write-Host "MyVariable: $Env:MyVariable"
Write-Host "MyVariable: $MyVariable
,set params= %*
中的空格不会为空,且比较不会失败。