ShellExecuteExでスペースを含む引数を渡すには?

このQ&Aのポイント
  • ShellExecuteEx関数を使用して、スペースを含む引数を渡す方法について知りたいです。
  • コマンドラインで実行する際に、スペースを含んだ引数を正しく渡す方法を教えてください。
  • ShellExecuteEx関数を使って実行ファイルを起動する際、スペースを含む引数の渡し方を教えてください。
回答を見る
  • ベストアンサー

ShellExecuteExでスペースを含む引数を渡すには?

すみません。 ShellExecuteEx関数を使用して、コマンドラインで実行していた実行ファイルを起動させたいのですが、実行ファイルに渡す引数にスペースが含まれると、ペースの前までか渡せないのですが、スペースを含む引数を渡す方法を御存知ないでしょうか? (詳細) コマンドライン(cmd.exe)では”○○○.exe 引数1 引数2 引数3(リターン)”で実行しているのですが、ShellExecuteEx("○○○.exe", "引数1 引数2 引数3”, NULL, ・・・・, SW_SHOW); のような形で作成して実行すると、引数1までで○○○.exeが実行されてしまい、スペースを挟んだ引数2以降が渡せていません。 スペースを挟んだ引数を渡す方法を御存知ないでしょうか? すみません。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>引数1までで○○○.exeが実行されてしまい、スペースを挟んだ引数2以降が渡せていません。 はどのように確認されたのでしょうか? 実行するアプリ側に依存しますが…… ShellExecuteEx("○○○.exe", "\"引数1 引数2 引数3\"”, NULL, ・・・・, SW_SHOW); で、""でくくってみてはどうでしょうか? この場合、mainに渡されるargv[]で引数が正しく取れるのかは…やったことありませんので不明ですが。 # 半角スペースはtab区切りでの分解がされないまま渡されるので自分でやる必要がある…とかどこかで見たような。

AVEREG
質問者

お礼

アドバイスありがとうございます。 引数に""でくくり、SHELLEXECUTEINFO の ○.lpParameters に渡して、ShellExecuteEx関数を実行してみましたが思い通り実行されませんでした。 ○○○.exe の実行結果はやはりスペースで区切る前の引数1だけで動作していました。(確認方法としては、○○○.exe の実行結果で最初の引数1しか渡していない時の実行結果となる事です。) 引数としては渡されているが、実行ファイル(○○○.exe)の性質によるのかもしれません・・・。 とりあえず、.batファイル(コマンドラインで入力する通り記載)を作り、.batファイルを実行することで対応することにしました。 早々のアドバイスありがとうございました。

関連するQ&A

  • コマンドライン引数について

    コマンドライン引数について opencvのサンプルを試しているのですが、困っています。 xcodeでビルドするとビルドは問題ないのですが、実行できない状態のものがあります。実行できないものは「デバックは正常に終了しました」や「ステータス255で終了しました」と出てしまいます。 前回の質問でコマンドライン引数が問題ではないか?とアドバイス頂き、色々と調べたのですが、main関数がコマンドライン引数をとることは理解出来たところで止まっています…。引数の指定の方法がわからず、Terminalから指定しようとexeファイルを開けて入力しようとしてみるのですが「プロセスは完了しました」と出てしまい、入力することができません… このやり方があっているかわからず、混乱しています。もし、検討違いのことを言っていたらすみません。 誰か引数の指定方法についてご存知であれば、アドバイス頂けないでしょうか? よろしくお願い致します。

  • ShellExecuteのコマンドについて

    すみません、どなたか教えてください。 下記のコマンドですが、 ShellExecute(null,"open","cmd.exe","実行したいもの",NULL,SW_HIDE); "実行したいもの" の書き方なんですが、 "/c c:\\work\\test.bat" のように書くと、cmd.exeにtest.batを実行させることができたんですが、 実行したいtest.batが指定できず、変数でセットする場合の書き方が分かりません。 ShellExecute(null,"open","cmd.exe","/c c:\\work\\test.bat",NULL,SW_HIDE); ↓ ShellExecute(null,"open","cmd.exe","/c c:\\work\\ "" & 変数 & "",NULL,SW_HIDE); こんな感じだと思うのですが、変数をダブルクォーテーションで囲むときに、ダブルクォーテーションをいくつ重ねるのかが分かりません。ググっているのですが、どこを調べていいのか分からず、はまっています。どなかたアドバイスお願いします。C++です。

  • コマンドラインのスペースについて

    下記コードのように年と月の間に半角スペースがある場合、実行ファイルにコマンドが全部伝わりません、正しい書き方を教えてください。 ちなみに、lame.exeのコマンドラインの区切りはスペースになっています。 lpArg="lame.exe -V 10 記録\\2011年 6月2日21時45分18秒.wav 記録\\2011年 6月2日21時45分18秒.mp3"; CreateProcessA(NULL,(LPTSTR)lpArg,NULL,NULL,FALSE,CREATE_NO_WINDOW,//NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); CloseHandle(pi.hThread);

  • ShellExecuteの使い方について

     既存のプログラム(他の人が作成したもの)を参考にプログラムを作成しましたが、どうしても、希望通りの挙動となりません。ShellExecuteの部分が要点と思いますので、その点について教えてください。言語は JavaScript です。  以下のような記述がありました。 ---- var launcher = new ActiveXObject("Shell.Application"); launcher.ShellExecute(cmd, param, "", "open", "1"); ----  ShellExecute の引き数の cmd は、実行ファイル名(ファイルパス付)、param は実行ファイルの引き数です。これはこれで動いています。  さて、これを参考に、cmd の部分にDOSコマンドを与えました。すると、DOSコマンドは実行されたものの、実行の瞬間に黒いウィンドウ(おそらく、コマンドプロンプトと思われます)が一瞬表示されました。この黒いウィンドウを表示させずにDOSコマンドを実行させたいのですが、引き数を調整することでそのようなことは可能でしょうか。  Webで調べたところ、ShellExecute の引き数として SW_SHOWNORMAL や SW_MAXIMIZE などを与える方法もあるようですが、SW_*** を紹介しているWebページでは、そもそも引き数の個数が上記と異なっていたりします。  ご助言をお願い致します。

  • コマンドライン引数の使い方

    [プロジェクトプロパティ]の[実行可能ファイルの作成]のコマンドライン引数の設定方法、使い方がよくわかりません。VBのヘルプを見てもいまいちです。具体的な利用例を使って教えて下さい。

  • 実行ファイルに値を渡す方法

    実行ファイル(EXE)に実行時にパラメータとして値を渡したいのですが、方法がわかりません。 コマンドライン引数を使用するのでしょうか?

  • 「コマンドライン引数に実行ファイルを指定する」方法を教えてください。

    アプリを「常に手前に表示」にするために、Ace-Window を利用していますが、 ひとつの方法に  コマンドライン引数に実行ファイルを指定する事で、アプリを実行と同時に「常に手前に表示」にする事が出来ます。 と、明記してあります。 私には、どうすればよいのかわからないので説明をしてください。 コマンドライン引数(?)に実行ファイルを指定するとは 具体的にどうすればよいのでしょうか。

  • 「コマンドライン引数チェック」て何

    #include <stdio.h> int main(int argc, char *argv[]) { FILE *fp; char gyou[1024]; int gyousuu = 0; if ( argc < 2 ){ printf("file mei ga nai\n"); return -1; } fp = fopen(argv[1], "r"); if ( fp == NULL ){ printf("fopen dekinai\n"); return -2; } while(fgets(gyou, sizeof(gyou), fp) != NULL){ gyousuu++; } fclose(fp); printf("gyousuu=%d\n", gyousuu); return 0; }    以上のプログラムはご覧のとおり、「ファイルの行数を計算」のプログラムです。 さて以上の  if ( argc < 2 ){ printf("file mei ga nai\n"); return -1; } は「コマンドライン引数チェック」を行っています。・・・  if ( argc < 2 ){の「argcは2以上である必要がある」と参考書に書いてあります。   以上ですが意味が日光手前ですが、プログラムの行数をカウントするうえで、  「コマンドライン引数チェック」とはどんな作業を行っているとこなのでしょうか!?  よろしくお願いします。  

  • SQL*LoaderのDATA引数

    Shellからsqlldrコマンドを実行する際に複数のロードファイル名を引数として渡したい。 しかし、コマンドラインから実行する際にデータ引数は複数指定できないと言われます。 ということは、制御ファイル内のINFILEに複数ファイル名を指定しないといけないと思うのですが、 ロードファイル名は固定ではなく、複数の場合もあれば1つの場合もあります。 詳しく説明させていただきますと、Shellで他のFTPサーバーから取得したCSVのフルパスをすべて取得しそれを制御ファイルのINFILEに渡したいのです。 なにか良い方法はありますでしょうか? ご存知の方がいればご教示いただきく存じます。 よろしくお願いいたします。

  • 【C言語】コマンドライン引数の標準入出力

    【C言語】コマンドライン引数の標準入出力 コマンドライン引数で、ファイル名を3つ渡します。-aの次のコマンドライン引数が、出力ファイル名です。 <<例>> ・実行モジュール -a 出力ファイル名 -b ファイル名 -c ファイル名 ・実行モジュール -c ファイル名 -a 出力ファイル名 -b ファイル名 もし出力ファイルが指定されなかった場合に、標準入出力を使いたいのですが、どうしたらいいかわかりません。 下記がソースの一部です。これをどう改造したらよいでしょうか。 分かる方いらっしゃいましたらご回答いただけると幸いです。 宜しくお願いします。 //出力ファイルを取得、書き込みモードでオープン for(j=1;j<argc-1;j++){ if(strcmp(argv[j],"-o")==0){ if((fo = fopen(argv[j+1],"w"))==NULL){ printf("open error!!\n"); exit(1); } } } while(fgets(buf,sizeof(buf),fp)!= NULL){ if(strstr(buf,"keyword")!= NULL){ //出力ファイルに出力 fprintf(fo,"%d:%s",line,buf); } }