DOSコマンドを実行(xcopy)

解決


どらごんめっと  2012-03-19 20:57:48  No: 143262

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


魔界の仮面弁士  2012-03-21 12:13:38  No: 143263

RedirectStandardInput を True にしておきましょう。


どらごんめっと  2012-03-27 22:01:10  No: 143264

魔界の仮面弁士さん大変失礼な事を致しました。
もうしわけございません。
回答拝見させて頂き、確認したのですが、そのご何がなんだかわからなくなり他の方法も試していましたら、お礼も忘れ、また違うハンドルで聞いてしまいました。本当にご迷惑をおかけします。
せんだて、どらごんめっと


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加