none
Start-Processを使って外部プログラムの引数がうまく扱えない・・・ RRS feed

  • 質問

  • 大変困っていますので、詳しい方教えていただけませんでしょうか?

    Start-Processを使って外部プログラムの起動をやろうとしています。

    外部プログラムを使う際、どうしても沢山の引数をつけてあげなければなりません。

    スペース、等符号、2バイト文字を含みます。

    プログラムの起動はするものの引数を渡せていないようでうまく動いてくれません・・・ちゃんと渡っているのかも確認しようがなく困っています。

    Start-Process -FilePath "H:\Program Files (x86)\hogehoge.exe" -ArgumentList string[" -userID matsui -password 55 -server nagashima << C:\Users\Desktop\国民栄誉賞.txt"] 

    ちなみにバッチファイルでは、こんな書き方で動きます。

    "H:\Program Files (x86)\hogehoge.exe" -userID matsui -password 55 -server nagashima << C:\Users\Desktop\国民栄誉賞.txt

    どこか間違っていますでしょうか?

    よろしくお願いいたします。

    2013年4月3日 11:04

回答

  • ヘルプに記載されているコマンドレット構文中に、-ArgumentList <string[]>のような記載があるかと思いますが、これは「-ArgumentListパラメータにはstring配列型の値を指定可能」という意味になります。

    コマンドライン引数は半角スペース区切りで認識されるので、半角スペースで分割した文字列配列を指定することになります。PowerShellで配列を記述するには、値同士を,で繋ぎます。またPowerShellのコマンドレットに指定するパラメータ値は文字列を""でくくらなくても基本はOKですが、-などのいくつかの記号から始まる文字列は""で括る必要があります。

    したがって以下のようになるでしょうか。

    Start-Process -FilePath "H:\Program Files (x86)\hogehoge.exe" -ArgumentList "-userID",matsui,"-password",55,"-server",nagashima, "<<","C:\Users\Desktop\国民栄誉賞.txt" 

    (<< というのはhogehoge.exeの引数と解釈しましたが、もしかして入力リダイレクトを意味しているのでしょうか?だとするとこれではダメかと思いますが…)

    exeを起動するだけならばStart-Processを使わず、直接

    &"H:\Program Files (x86)\hogehoge.exe" -userID matsui -password 55 -server nagashima "<<" C:\Users\Desktop\国民栄誉賞.txt

    と指定してやっても動くかと思います。

    パスに半角スペースを含むexeを実行する場合は、パスを""で括り実行演算子&をつけます。またこの場合も<<を入力リダイレクトと認識しないように""でくくっておきます。

    なお今回は大丈夫そうですが、たとえばコマンドプロンプトでは

    hoge.exe -p "hikisuu"

    のように""でくくられた引数を渡す場合は、PowerShellで同じようにするにはさらに注意が必要です。""でくくられた引数はその内部の文字列(ここでは「hikisuu」)がexeに渡されます。したがって""も含めてexeに渡したい場合は、

    hoge.exe -p `"hikisuu`"

    のように"をエスケープ文字`を使ってエスケープしてやるか、

    hoge.exe -p '"hikisuu"'

    のように引数全体をさらに文字列引用符''でくくる必要があります。

    • 回答としてマーク mr-r00 2013年4月4日 15:10
    2013年4月4日 4:05
    モデレータ

すべての返信

  • ヘルプに記載されているコマンドレット構文中に、-ArgumentList <string[]>のような記載があるかと思いますが、これは「-ArgumentListパラメータにはstring配列型の値を指定可能」という意味になります。

    コマンドライン引数は半角スペース区切りで認識されるので、半角スペースで分割した文字列配列を指定することになります。PowerShellで配列を記述するには、値同士を,で繋ぎます。またPowerShellのコマンドレットに指定するパラメータ値は文字列を""でくくらなくても基本はOKですが、-などのいくつかの記号から始まる文字列は""で括る必要があります。

    したがって以下のようになるでしょうか。

    Start-Process -FilePath "H:\Program Files (x86)\hogehoge.exe" -ArgumentList "-userID",matsui,"-password",55,"-server",nagashima, "<<","C:\Users\Desktop\国民栄誉賞.txt" 

    (<< というのはhogehoge.exeの引数と解釈しましたが、もしかして入力リダイレクトを意味しているのでしょうか?だとするとこれではダメかと思いますが…)

    exeを起動するだけならばStart-Processを使わず、直接

    &"H:\Program Files (x86)\hogehoge.exe" -userID matsui -password 55 -server nagashima "<<" C:\Users\Desktop\国民栄誉賞.txt

    と指定してやっても動くかと思います。

    パスに半角スペースを含むexeを実行する場合は、パスを""で括り実行演算子&をつけます。またこの場合も<<を入力リダイレクトと認識しないように""でくくっておきます。

    なお今回は大丈夫そうですが、たとえばコマンドプロンプトでは

    hoge.exe -p "hikisuu"

    のように""でくくられた引数を渡す場合は、PowerShellで同じようにするにはさらに注意が必要です。""でくくられた引数はその内部の文字列(ここでは「hikisuu」)がexeに渡されます。したがって""も含めてexeに渡したい場合は、

    hoge.exe -p `"hikisuu`"

    のように"をエスケープ文字`を使ってエスケープしてやるか、

    hoge.exe -p '"hikisuu"'

    のように引数全体をさらに文字列引用符''でくくる必要があります。

    • 回答としてマーク mr-r00 2013年4月4日 15:10
    2013年4月4日 4:05
    モデレータ
  • ありがとうございました!

    私がかなり勘違いしていた部分がありました。

    おかげさまでうまくプログラムが動きました!

    2013年4月4日 15:11