cmd for loop escape?在集?

时间:2012-12-06 13:44:48

标签: windows for-loop batch-file cmd wildcard

有没有办法逃避for循环中的问号,以便以下方法有效?

for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)

它会比单独的if更干净。在单独的if子句中%% a == / ^?有效,但不在这里。

2 个答案:

答案 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= %*中的空格不会为空,且比较不会失败。