1. ホーム
  2. windows

[解決済み] Windowsのコマンドラインでバッチファイル内のパラメータを使用する

2022-04-21 10:55:31

質問

Windowsで、バッチファイルを実行するときに渡される引数にアクセスするにはどうしたらよいですか?

たとえば、次のようなプログラムがあるとします。 hello.bat . と入力すると hello -a を Windows のコマンドラインで実行する場合、どのようにすればプログラムに -a は引数として渡されたのですか?

解決方法は?

すでに他の方がおっしゃっているように、コマンドラインから渡されたパラメータは、バッチファイルの中で、以下の記法でアクセスすることができます。 %1 から %9 . また、他にも2つのトークンがあります。

  • %0 コマンドラインで指定された実行ファイル(バッチファイル)名 .
  • %* コマンドラインで指定されたすべてのパラメータ -- パラメータを他のプログラムに転送したい場合に非常に便利です。

また、単純にパラメータにアクセスする方法だけでなく、注意すべき重要なテクニックがたくさんあります。

パラメータが渡されたかどうかを確認する

これは、以下のような構成で行われます。 IF "%~1"=="" これは、引数がまったく渡されなかった場合にのみ、真となります。の値から引用符を除去するチルダ文字に注意してください。 %1 チルダをつけないと、値に二重引用符が含まれる場合に予期せぬ結果を招き、構文エラーになる可能性もあります。

9個以上の引数を処理する(または単に生活を楽にする)

9個以上の引数にアクセスする必要がある場合は、コマンドを使用する必要があります。 SHIFT . このコマンドは、すべての引数の値を1つずつずらすので %0 の値を取る。 %1 , %1 の値を取る。 %2 など。 %9 を呼び出す前にどの変数でも利用できなかった第 10 引数 (存在する場合) の値を取ります。 SHIFT (入力コマンド SHIFT /? を選択します。)

SHIFT は、パラメータを特定の順番で表示させることなく、簡単に処理したい場合にも便利です。たとえば、あるスクリプトがフラグ -a-b を任意の順番で表示します。このような場合、コマンドラインを解析する良い方法として

:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-a" REM do something
IF "%~1"=="-b" REM do something else
SHIFT
GOTO parse
:endparse
REM ready for action!

このスキームを使えば、かなり複雑なコマンドラインでも発狂することなく解析することができます。

バッチパラメータの代用

ファイル名を表すパラメータに対して、シェルは他の方法ではアクセスできない、ファイル操作に関連する多くの機能を提供します。この機能へのアクセスは %~ .

例えば、引数で渡されたファイルのサイズを取得するには、次のようにします。

ECHO %~z1

バッチファイルが起動されたディレクトリのパスを取得するには(とても便利です!)、次のようにします。

ECHO %~dp0

と入力すると、これらの機能の全容を見ることができます。 CALL /? をコマンドプロンプトで表示します。