みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バッチスクリプトでの引数の囲み文字の取り扱い

お世話になります。

Windowsのバッチスクリプトで、スクリプトに指定する引数の、スクリプト内部での引数の囲み文字「""」の取り扱われ方についてご教授下さい。

現在使用しているバッチスクリプトは引数を使用していますが、各引数を「":ダブルコーテーション」で囲んで指定しています。
個の引数は他のシステム(AS400)のジョブ起動、ファイル名作成にそのまま使用しております。

バッチスクリプトとパラメータ指定は下記の通りになります。

   スクリプト名 "引数1" "引数2"

スクリプト内部では"引数1" "引数2"を%1、%2で参照しています。

スクリプト内部のパラメータ展開を調査する為、該当部分の文字列をECHOで出力しました。

・AS400のジョブ起動のコマンドはパラメータ部分に引数を指定しており
 rmtcmd SBMJOB CMD(CALL PGM("引数1"/"引数2")

・引数を使用したファイル名指定では
 \jobcon\"引数1""引数2".txt

と展開されておりました。
AS400のコマンドは引数の「":ダブルコーテーション」を外した内容で処理されており、
ファイルも「":ダブルコーテーション」が外れたファイル名で作成されました。

IF文等では「":ダブルコーテーション」を付けた形式でなくては比較できません。

バッチスクリプトでの文字列中の「":ダブルコーテーション」の取り扱われかたについてご教授下さい。

宜しくお願いします。

投稿日時 - 2014-01-27 19:07:24

QNo.8449489

すぐに回答ほしいです

質問者が選んだベストアンサー

>お答えいただいた内容を詳細に説明しているサイトをご存知でしたら教えていただきたく。

どの部分ですかね。

>Windowsのバッチスクリプトのことなら、" は、空白や & や < や | などの特殊文字を含んだ引数を指定するときに、その引数を囲うというように使います。

は、コマンドプロンプトで cmd /? で表示される末尾に書いてあります。

>" 自体もコマンドに渡されるので、

は、" が取り除かれるという記述がどこにも無いことから。あるいは実際にやってみればすぐわかる。

>バッチスクリプトに渡す引数を"で囲んだ場合、バッチスクリプト中では %~1 などとすることで、" を外して参照することが出来ます。

は、call /? で表示されるものの中程に書いてあります。

>それは呼び出されたプログラム次第です。

は、自明。

投稿日時 - 2014-01-29 18:46:16

お礼

何度もご回答ありがとうございます。
また最後の質問は漠然とした内容でした、どうもすいません。
質問の内容については自分あれこれ推理しておりました。
ご回答でいくつか自分でも試してみまたが、おかげさまでやっと納得がいきました。
ありがとうございました。

投稿日時 - 2014-02-02 15:36:44

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>上記のように「":ダブルコーテーション」を含んだままコマンドのパラメータとして実行、またはファイル名に採用した場合、ダブルコーテーションはないものとして扱われるという認識でよろしいでしょうか?が質問の主旨です。

それは呼び出されたプログラム次第です。
そのプログラムが " を無いものとして扱うように書かれていればそうだし、
" をそのまま特別扱いせず取り扱うように書かれていれば、そうじゃないし。

呼び出されたのが、バッチスクリプトの場合はNo1の回答に書いたとおりです。

投稿日時 - 2014-01-28 21:40:42

補足

ご回答ありがとうございます。

たびたび恐縮ですが、お答えいただいた内容を詳細に説明しているサイトをご存知でしたら教えていただきたく。
よろしくお願いします。

投稿日時 - 2014-01-29 07:12:05

ANo.1

>バッチスクリプトでの文字列中の「":ダブルコーテーション」の取り扱われかたについてご教授下さい。

Windowsのバッチスクリプトのことなら、" は、空白や & や < や | などの特殊文字を含んだ引数を指定するときに、その引数を囲うというように使います。
例1: 引数に空白を含んだパス名を指定
notepad "C:\aaa bbb\ccc.txt"
例2: 特殊文字を含んだ引数
echo "<><>"

" 自体もコマンドに渡されるので、コマンド側で"を適切に処理(取り除くなど)が必要です。
例2だと、" もechoで出力されてしまう。

バッチスクリプトに渡す引数を"で囲んだ場合、バッチスクリプト中では %~1 などとすることで、" を外して参照することが出来ます。

投稿日時 - 2014-01-27 23:36:30

補足

補足説明です。
上記のように「":ダブルコーテーション」を含んだままコマンドのパラメータとして実行、またはファイル名に採用した場合、ダブルコーテーションはないものとして扱われるという認識でよろしいでしょうか?が質問の主旨です。

よろしくお願いします。

投稿日時 - 2014-01-28 16:17:47

あなたにオススメの質問