バッチ ファイルで次の検証ロジックを使用しようとしていますが、バッチ ファイルにパラメーターが指定されていない場合でも、"usage" ブロックが実行されません。
if ("%1"=="") goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 <EnvironmentName>
exit 1
私は何を間違っていますか?
バッチ ファイルで次の検証ロジックを使用しようとしていますが、バッチ ファイルにパラメーターが指定されていない場合でも、"usage" ブロックが実行されません。
if ("%1"=="") goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 <EnvironmentName>
exit 1
私は何を間違っていますか?
コマンドライン引数が設定されているかどうかのチェックは可能です[%1]==[]
が、Dave Costaが 指摘しているように、"%1"==""
機能することもあります。
大なり記号と小なり記号をエスケープするため、echo の使用法の構文エラーも修正しました。さらに、引数exit
が必要です。それ以外の場合は終了します。/B
CMD.exe
@echo off
if [%1]==[] goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 ^<EnvironmentName^>
exit /B 1
IF "%~1"=="" GOTO :Usage
~ は、%1 自体が引用されている場合、%1 の引用を解除します。
" " は、渡された特殊文字から保護します。たとえば、 &ping を使用してスクリプトを呼び出す
これは他の回答と同じですが、ラベルを1つだけ使用し、使用法を最初に配置します。これにより、通常は上部に配置されるスクリプトの一種のドキュメントの推奨としても機能します。
@echo off
:: add other test for the arguments here...
if not [%1]==[] goto main
:: --------------------------
echo This command does something.
echo.
echo %0 param%%1 param%%2
echo param%%1 the file to operate on
echo param%%1 another file
:: --------------------------
exit /B 1
:main
:: --------------------------
echo do something with all arguments (%%* == %*) here...
ただし、cmd/batch を使用する必要がない場合は、WSL または PowerShell で bash を使用してください。これらの構文はより正気であり、難解な機能は少なくなります。
IF "%1"=="" GOTO :Continue
.....
.....
:Continue
IF "%1"=="" echo No Parameter given