• ベストアンサー

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

お世話になります。 Windowsのバッチスクリプトで、スクリプトに指定する引数の、スクリプト内部での引数の囲み文字「""」の取り扱われ方についてご教授下さい。 現在使用しているバッチスクリプトは引数を使用していますが、各引数を「":ダブルコーテーション」で囲んで指定しています。 個の引数は他のシステム(AS400)のジョブ起動、ファイル名作成にそのまま使用しております。 バッチスクリプトとパラメータ指定は下記の通りになります。    スクリプト名 "引数1" "引数2" スクリプト内部では"引数1" "引数2"を%1、%2で参照しています。 スクリプト内部のパラメータ展開を調査する為、該当部分の文字列をECHOで出力しました。 ・AS400のジョブ起動のコマンドはパラメータ部分に引数を指定しており  rmtcmd SBMJOB CMD(CALL PGM("引数1"/"引数2") ・引数を使用したファイル名指定では  \jobcon\"引数1""引数2".txt と展開されておりました。 AS400のコマンドは引数の「":ダブルコーテーション」を外した内容で処理されており、 ファイルも「":ダブルコーテーション」が外れたファイル名で作成されました。 IF文等では「":ダブルコーテーション」を付けた形式でなくては比較できません。 バッチスクリプトでの文字列中の「":ダブルコーテーション」の取り扱われかたについてご教授下さい。 宜しくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

>お答えいただいた内容を詳細に説明しているサイトをご存知でしたら教えていただきたく。 どの部分ですかね。 >Windowsのバッチスクリプトのことなら、" は、空白や & や < や | などの特殊文字を含んだ引数を指定するときに、その引数を囲うというように使います。 は、コマンドプロンプトで cmd /? で表示される末尾に書いてあります。 >" 自体もコマンドに渡されるので、 は、" が取り除かれるという記述がどこにも無いことから。あるいは実際にやってみればすぐわかる。 >バッチスクリプトに渡す引数を"で囲んだ場合、バッチスクリプト中では %~1 などとすることで、" を外して参照することが出来ます。 は、call /? で表示されるものの中程に書いてあります。 >それは呼び出されたプログラム次第です。 は、自明。

edo2013
質問者

お礼

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

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>上記のように「":ダブルコーテーション」を含んだままコマンドのパラメータとして実行、またはファイル名に採用した場合、ダブルコーテーションはないものとして扱われるという認識でよろしいでしょうか?が質問の主旨です。 それは呼び出されたプログラム次第です。 そのプログラムが " を無いものとして扱うように書かれていればそうだし、 " をそのまま特別扱いせず取り扱うように書かれていれば、そうじゃないし。 呼び出されたのが、バッチスクリプトの場合はNo1の回答に書いたとおりです。

edo2013
質問者

補足

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

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>バッチスクリプトでの文字列中の「":ダブルコーテーション」の取り扱われかたについてご教授下さい。 Windowsのバッチスクリプトのことなら、" は、空白や & や < や | などの特殊文字を含んだ引数を指定するときに、その引数を囲うというように使います。 例1: 引数に空白を含んだパス名を指定 notepad "C:\aaa bbb\ccc.txt" 例2: 特殊文字を含んだ引数 echo "<><>" " 自体もコマンドに渡されるので、コマンド側で"を適切に処理(取り除くなど)が必要です。 例2だと、" もechoで出力されてしまう。 バッチスクリプトに渡す引数を"で囲んだ場合、バッチスクリプト中では %~1 などとすることで、" を外して参照することが出来ます。

edo2013
質問者

補足

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

関連するQ&A

  • バッチスクリプトでの%nの展開

    こんにちは。 「第n引数(n=1~9)から、二重引用符を除いた文字列が空白文字でなければ、 echoコマンドでそれを表示する」というバッチスクリプトを作成したいと考えています。 そこで、 「%~nが、第n引数から二重引用符を除いた文字列を返す」 という事を考慮し、以下のようなスクリプトを作成しました。 _________________ @echo off for /L %%n in (1,1,9) do ( if not "%~%%n" == "" echo 「%~%%n」 ) _________________ これを実行すると、以下のようなエラーメッセージが出ました。 バッチ パラメータの置き換えで、パス演算子の次の使用法は無効です: %~%%n" == "" echo 「%~%%n」 有効な形式については、「CALL /?」または「FOR /?」と入力してください。 コマンドの構文が誤っています。 callコマンドの説明を読んでも、今回の問題と関係ありそうな部分は見つかりませんでした。 何か良い案が浮かぶ方がいらっしゃれば、アドバイスをお願い致します。 では、よろしくお願い致します。

  • バッチファイルを起動したけど、win98では引数が長すぎて。。。

    VBからバッチファイルを起動する処理を作成中です。 SHELL コマンドで実行しているのですが、 そのバッチファイルの引数がすごく長いのです。 >batch.bat "引数1" "引数2" "引数3" とする際、引数1 ~ 引数3までの合計文字列が 128?byte を超えてしまい、 win98では、使えないプログラムがあります。 複数の引数をまとめたファイルを、バッチファイルの 引数として起動させる等、 回避作はあるのでしょうか? 教えてください。

  • printf関数の引数は文字例と決まっているからです。

    printf関数は文字列しか引数として受け取りません。 printf("文字列"); では数値を引数にしたらどうでしょう? #include <stdio.h> #main () {     printf(1);     return 0; } これはコンパイルエラーになります。printf関数の引数は文字列と決まっているからです。 この文章について質問です。 Q.なぜ上の「文字数」はダブルクォーテーションで囲まれているのに、下の「1」にダブルクォーテーションはないのでしょうか? Q.文書を見る限り、Cでは文字列と数値は区別されているように見えますが、なぜでしょうか?

  • シェルスクリプトのコマンドの中に引数を使いたいのですが

    シェルスクリプトのコマンドの中に引数を使いたいです。 例えば sed -i 's/*/$1/g' /* のように文字置換コマンド中に引数で書き換えられるようにしたいのですがそのまま$1に書き換わってしまいます。渡し方がおかしいのでしょうか?宜しくお願いします。

  • DOSのバッチファイルでのヒアドキュメント

    UNIXのシェルスクリプトでは、コマンドに引数を渡すときに ヒアドキュメントを使って 例えば、 command <<EOF data ・ ・ ・ EOF という風に、commandの次行からEOFという文字が出てくるまでの間の 値を引数として与えられたり出来ますが DOSのバッチファイルでも同じ様なこと(似たようなこと)は出来るのでしょうか 現在とあるコマンドに対し、データセットを渡す際に その都度データファイルを作って、リダイレクトで引数を渡す という方法で、対処しています これが出来ると、小さなデータセットくらいならファイル作らなくて済むので (バッチファイル中にデータセット書き込めるので) ファイル管理とか非常にやりやすくなるんですが・・・ ご存じの方、教えて下さい!! 勿論、代替策でも結構です

  • バッチファイルからVBAに引数を渡したい

    お世話になります。 a.batというバッチファイルがあります。 このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。 EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。 どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。 環境 WindowsXP SP3 Excel2003 ============================== バッチファイル側 ============================== @echo off echo バッチファイルを実行します。 ABC.xls "1303" echo 終了しました。 ============================== EXCEL VBA側 ============================== Sub auto_open(a As String) Msg a end sub

  • シェルスクリプトに引数を渡す方法?

    次のようなシェルスクリプトを作り、バッチ処理で実行したいのですが、うまくいかず困っています。 %ls test.sh data %less test.sh #!/bin/sh calc.exe input=$1 コマンドから通常実行するときは、 % test.sh data でうまく行きます。 これを、qsubを使ったバッチ処理で実行しなければならなくて、 %qsub test.sh data とすると、qsubは引数を1つしか取れないので、構文エラーとなり、うまく入力引数"data"を渡せません。 %qsub "test.sh data" %qsub 'test.sh data' で、引数を1つにしようとしましたが、ダメでした。 引数ファイル名"data"は、名前が変わるので、できるだけ可変になるようにしたいです。 どなたか、解決法もしくは、参考URLなど教えてください。

  • バッチファイルで大量の引数が処理できない

    バッチファイルで大量のファイル(具体的には28個以上)を処理しようとすると 「指定されたデバイス・パス、またはファイルにアクセスできません。アクセス許可がない可能性があります。」 とエラーログが表示され、処理が行われません。 (shiftコマンドで引数(ファイル)を一つずつリネームしていく処理を行っております。) 管理者権限のアカウントでの操作ですし、同じファイルをひとつ、もしくは~27個処理した場合は問題ありません。 28個以上の大量の引数を利用した処理を行う方法をご存じの方がいましたら、ぜひご教授下さい。

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • EXCELバッチコマンド起動時のxlsファイル指定方法について

    EXCELをバッチコマンド起動する場合に、既存のexcelファイルを起動時に自動起動させる方法を教えて下さい。 以前利用したことがあります。 excelコマンドの引数にxlsファイルを指定したうえで、もう一つ何か固定パラメータがあつた記憶があります。 よろしくお願いします。

専門家に質問してみよう