psi.Arguments = "/c xcopy C:\tmp d:\tmp /d /e /r /k /y /c"
のxcopy C:\tmp d:\tmp /d /e /r /k /y /cが実行出来ません。
DOSプロンプトで手入れすると動作します。
また、他のコマンド
psi.Arguments = "/c copy C:\tmp\*.* d:\tmp"
等とすると、以下のプログラムで動作します。
何がおかしいでしょうか?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Call Shell(Environ$("ComSpec") & "xcopy C:\tmp d:\tmp /d /e /r /k /y /c")
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 xcopy C:\tmp d:\tmp /d /e /r /k /y /c"
'起動
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
'出力を読み取る
results = p.StandardOutput.ReadToEnd
'出力された結果を表示
MsgBox(results)
'Console.WriteLine(results)
'WaitForExitはReadToEndの後である必要がある
'(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit()
End Sub
End Class
RedirectStandardInput を True にしておきましょう。
魔界の仮面弁士さん大変失礼な事を致しました。
もうしわけございません。
回答拝見させて頂き、確認したのですが、そのご何がなんだかわからなくなり他の方法も試していましたら、お礼も忘れ、また違うハンドルで聞いてしまいました。本当にご迷惑をおかけします。
せんだて、どらごんめっと
ツイート | ![]() |