vbsへの実行時引数でダブルクォーテーションを渡したいのですが。

回答済み vbsへの実行時引数でダブルクォーテーションを渡したいのですが。

  • 2008年10月14日 1:41
     
     
    CScriptファイルに対し、
    実行時引数として
    A "b c" D
    というように
    半角スペースとダブルクォーテーションを含めた
    引数を指定したいのですが。

    どのように指定すればよいのでしょうか?

回答

  • 2008年10月14日 2:23
    モデレータ
     
     回答済み

     無理っぽいです。以下のページでは、クォートや全角のダブルクォートを置換して半角のダブルクォートにする方法を行っています。

     

    (参考)
    テキストファイル内の特定の行だけ書き換えるスクリプト
    http://rocketeer.dip.jp/sanaki/free/free42.htm

     

    WScript.Arguments won't parse double-quotes within arguments
    http://groups.google.com/group/microsoft.public.scripting.vbscript/browse_thread/thread/f37717d3d7a2ccf8/2946e67d6f56708b?#2946e67d6f56708b

  • 2008年10月14日 10:03
     
     回答済み

    まず、WSHで引数の"は消えます。

    なので、やりたいことに合わせて代替法を選択してください。

    "b c"

    はWScript.Arguments.Item(1)に「b c」で渡ってくるので、「"b c"」に戻したければ、

    If InStr(WScript.Arguments.Item(1)," ") Then x="""" & WScript.Arguments.Item(1) & """"

    のようにします。

     

    引数の中に"を含めたいときのお勧めは、逆引用符で代替記述して、復元することです。

    "CreateObject(""WScript.Shell"")"

    "CreateObject(`WScript.Shell`)"

    みたいにして

    Replace(WScript.Arguments.Item(1),"`","""")

    単一引用符はJScriptで使うので、あまり使われない逆引用符がよいかと。

     

    あと、WMIを使って、自プロセスのコマンドラインを調べることもできますが、

    面倒なのでお勧めしません。

すべての返信

  • 2008年10月14日 2:23
    モデレータ
     
     回答済み

     無理っぽいです。以下のページでは、クォートや全角のダブルクォートを置換して半角のダブルクォートにする方法を行っています。

     

    (参考)
    テキストファイル内の特定の行だけ書き換えるスクリプト
    http://rocketeer.dip.jp/sanaki/free/free42.htm

     

    WScript.Arguments won't parse double-quotes within arguments
    http://groups.google.com/group/microsoft.public.scripting.vbscript/browse_thread/thread/f37717d3d7a2ccf8/2946e67d6f56708b?#2946e67d6f56708b

  • 2008年10月14日 10:03
     
     回答済み

    まず、WSHで引数の"は消えます。

    なので、やりたいことに合わせて代替法を選択してください。

    "b c"

    はWScript.Arguments.Item(1)に「b c」で渡ってくるので、「"b c"」に戻したければ、

    If InStr(WScript.Arguments.Item(1)," ") Then x="""" & WScript.Arguments.Item(1) & """"

    のようにします。

     

    引数の中に"を含めたいときのお勧めは、逆引用符で代替記述して、復元することです。

    "CreateObject(""WScript.Shell"")"

    "CreateObject(`WScript.Shell`)"

    みたいにして

    Replace(WScript.Arguments.Item(1),"`","""")

    単一引用符はJScriptで使うので、あまり使われない逆引用符がよいかと。

     

    あと、WMIを使って、自プロセスのコマンドラインを調べることもできますが、

    面倒なのでお勧めしません。

  • 2008年10月24日 9:32
     
     

    こんにちは。中川俊輔 です。

     

    trapemiyaさん、ウィンドウズスクリプトプログラマさん、回答ありがとうございます。

     

    番頭さん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    有用な情報と思われたため、勝手ながら

    trapemiyaさん、ウィンドウズスクリプトプログラマさんの回答へ回答済みチェックを

    つけさせていただきました。

    追加の質問等ありましたら、ぜひ投稿してみてください。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!