記事一覧

DOSバッチの引数にスペースが含まれる場合における注意事項

 

  
目次     



  

DOSバッチの引数

ハロー、みなさん。エジソンです。

DOSバッチに引数を渡したいコードを書きたい人は必見です。要注意事項を記事にまとめました。

引数を使ってみる

引数を受け取るバッチファイルを作成して、動作を確認してみましょう。

リスト1-1:args.batとして保存
@echo off
echo 引数を以下に出力
echo %0 %1 %2 %3 %4

リスト1-2:実行結果
C:\Users\username\Desktop>args.bat 1 2 3 4
引数を以下に出力
args.bat 1 2 3 4

引数の値にスペースがある場合

引数の値にスペースがある場合は一工夫必要です。スペースはDOSバッチにおいては、式の一区切りとしてみなされるからです。

そんな場合には、ダブルクォート " で引数を囲みます。

リスト2:args.batを実行
C:\Users\username\Desktop>args.bat "一番目 1番目" "二番目 2番目" "三番目 3番目" "四番目 4番目" ← 実行例
引数を以下に出力
args.bat "一番目 1番目" "二番目 2番目" "三番目 3番目" "四番目 4番目"

スペース有りでも一塊の引数として認識されるようになりましたが、ダブルクォートが実行結果に含まれるようになりました。

ダブルクォートを取り除いた状態で引数を参照する

引数として受け取った情報からダブルクォートの囲みを取り除く方法があります。
それは、例えば第一引数の場合、%~1とします。~がポイントですね。

リスト3-1:args2.batとして保存
@echo off
echo 引数を以下に出力
echo %~0 %~1 %~2 %~3 %~4

リスト3-2:実行結果
C:\Users\username\Desktop>args.bat "一番目 1番目" "二番目 2番目" "三番目 3番目" "四番目 4番目" ← 実行例
引数を以下に出力
args.bat 一番目 1番目 二番目 2番目 三番目 3番目 四番目 4番目


結論…、引数を参照する場合は ~ を使う

引数をバッチ中で参照する場合は、 ~ を使いましょう!

バッチの中でさらに別のバッチ(以後、サブバッチとする)を呼び出す場合を考えてみましょう。
バッチに指定された引数をサブバッチに引き渡すケースにおいて、 ~ を使わずにいると問題が起きる事があるのです。

引数にスペースがあることを加味して、引数値をダブルクォートで囲みサブバッチ呼び出しを記述した場合に、そもそもその引数値が既にダブルクォートで囲まれていると、サブバッチへの引数値が二重にダブルクォートで囲まれる事になります。

そのため、引数を参照する場合は常に、 %~1 のような参照を心がけ、サブバッチなどに引数を渡してあげる際は、ダブルクォートで囲んだ上で、 ~ を使う( "%~1" のようにすると良いでしょう

要丸暗記事項です。

関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp

ezolab