2

以下が機能するように、for ループで疑問符をエスケープする方法はありますか?

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

個別の if よりもはるかにクリーンです。別の if 句で %%a==/^? 動作しますが、ここではありません。

4

2 に答える 2

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
于 2012-12-06T20:08:04.167 に答える