プロが教える店舗&オフィスのセキュリティ対策術

VB.NETでのDOSコマンドを実行について

いつも大変お世話になっています。
VB.NET上でバイナリデータを
DOSコマンド「copy」で結合させたいのですが
うまくいきません。ご助言ください。

Dim results As String
Dim psi As New System.Diagnostics.ProcessStartInfo()

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")

'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False

'ウィンドウを表示しないようにする
psi.CreateNoWindow = True

'コマンドラインを指定("/c"は実行後閉じるために必要)
psi.Arguments = _
"/c copy /b /y "C:\Program Files\test\Data\out0001.bin"+"C:\Program Files\test\Data\out0002.bin" "C:\Program Files\test\Data\TEST.jpg""
'※コマンドの前後のダブルクォーテーションを省き、コマンドプロンプトで
' 直接実行した場合は成功しました。

'起動
Dim p As System.Diagnostics.Process=_
System.Diagnostics.Process.Start(psi)

'出力を読み取る
results = p.StandardOutput.ReadToEnd

'出力された結果を表示
Console.WriteLine(results)

'WaitForExitはReadToEndの後である必要がある
'(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit()

A 回答 (2件)

どんなエラーになってますか?



おそらく
"/c copy /b /y "
までで文字列
C:\Program Files\test\Data\out0001.bin
が文字列の外
"+"
が文字列
C:\Program Files\test\Data\out0002.bin
が文字列の外
...
となっているのではないかと思います。

"/c copy /b /y ""C:\Program Files\test\Data\out0001.bin""+""C:\Program Files\test\Data\out0002.bin"" ""C:\Program Files\test\Data\TEST.jpg"""

と"から"の間に"を書きたいときは、""と2つ続けるはずです。
(最後が3つなのは、前の2つは"を文字列に入れるため、最後の一つは文字列の終りです)


それか、いっそCOPYコマンドを使わず、VBだけでファイルの読み書きするかです。
    • good
    • 0
この回答へのお礼

わかりやすい解説も付けていただき、
ありがとうございます。
無事解決しました。m(__)m

お礼日時:2010/10/01 09:53

パッと見た感じでは、psi.Arguments の編集がおかしいだけではないでしょうか。


「Program Files」という空白付のファイルパスを指定しているので、これを「"」で囲む必要があるのは
よいとして、VBでは

.../c copy /b /y ""C:\Program Files....

という具合に、文字列の中で「"」を重ねて指定する必要があります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事解決しました。m(__)m

お礼日時:2010/10/01 09:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!