有没有办法在 for 循环中转义问号,以便以下工作?
for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)
它会比单独的 if 干净得多。在单独的 if 子句中 %%a==/^? 工作,但不在这里。
有没有办法在 for 循环中转义问号,以便以下工作?
for %%a in (%*) do (
for %%b in (/? /h /help -h -help --help) do if %%a==%%b goto usage
)
它会比单独的 if 干净得多。在单独的 if 子句中 %%a==/^? 工作,但不在这里。
没有办法保留通配符 * ?在 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
除了 %* 为空时的“params”变通方法失败:如果您在 %* 前加上空格: set params= %*
,它在 中不会为空,%params:/?=%"
并且比较也不会失败。