以下が機能するように、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