[解決済み] Windowsのコマンドラインでバッチファイル内のパラメータを使用する
質問
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 /?
をコマンドプロンプトで表示します。
関連
-
[解決済み] UnicodeDecodeError: 'charmap' コーデックは、位置YのバイトXをデコードできません:文字は<undefined>にマップされます。
-
[解決済み] ssh_dispatch_run_fatal:message authentication code incorrect unable to ssh jupyter notebook on remote server.入力のMACが破損している。
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] WindowsのCMDで1行に2つのコマンドを実行するにはどうしたらいいですか?
-
[解決済み] N日以上前のファイルを削除するバッチファイル
-
[解決済み] Windowsのコマンドラインで、現在の日付/時刻をファイル/フォルダー名で使用するために適切な形式で取得するにはどうすればよいですか?
-
[解決済み] Windowsでコマンドラインから空のファイルを作成するには?
-
[解決済み】Windowsのバッチファイル:.batと.cmdの違いは?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】DockerリポジトリサーバーがHTTPSクライアントにHTTPレスポンスを返すようになった
-
[解決済み】Curlが内部コマンド、外部コマンド、操作可能なプログラム、バッチファイルとして認識されない。
-
[解決済み] どのような場合に0x40010004のコードでプログラムが終了するのでしょうか?
-
[解決済み] OpenSSL が設定ファイルの distinguished_name を見つけられませんでした。
-
Windows2008 スケジュールタスク、エラー追加データ。エラーの値: 2147750687。
-
[解決済み] cmd lineを使用してファイルをZIPする方法は?
-
[解決済み] Windowsのバッチスクリプトにおける"@"の意味について
-
[解決済み] CMDでPowerShellを実行する方法
-
[解決済み] Windows PowerShellの環境変数を設定する
-
[解決済み] バッチファイルに引数を渡すにはどうしたらいいですか?