109

バッチ ファイルで次の検証ロジックを使用しようとしていますが、バッチ ファイルにパラメーターが指定されていない場合でも、"usage" ブロックが実行されません。

if ("%1"=="") goto usage

@echo This should not execute

@echo Done.
goto :eof

:usage
@echo Usage: %0 <EnvironmentName>
exit 1

私は何を間違っていますか?

4

7 に答える 7

168

コマンドライン引数が設定されているかどうかのチェックは可能です[%1]==[]が、Dave Costaが 指摘しているように、"%1"==""機能することもあります。

大なり記号と小なり記号をエスケープするため、echo の使用法の構文エラーも修正しました。さらに、引数exitが必要です。それ以外の場合は終了します。/BCMD.exe

@echo off

if [%1]==[] goto usage
@echo This should not execute
@echo Done.
goto :eof
:usage
@echo Usage: %0 ^<EnvironmentName^>
exit /B 1
于 2009-05-06T16:45:37.097 に答える
24
于 2016-01-01T01:42:51.793 に答える
6
IF "%~1"=="" GOTO :Usage

~ は、%1 自体が引用されている場合、%1 の引用を解除します。

" " は、渡された特殊文字から保護します。たとえば、 &ping を使用してスクリプトを呼び出す

于 2014-11-24T16:50:50.790 に答える
3

これは他の回答と同じですが、ラベルを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 を使用してください。これらの構文はより正気であり、難解な機能は少なくなります。

于 2018-12-27T16:13:29.673 に答える
1
IF "%1"=="" GOTO :Continue
.....
.....
:Continue
IF "%1"=="" echo No Parameter given
于 2012-05-01T21:52:55.540 に答える