【发布时间】:2016-02-29 15:57:04
【问题描述】:
我从 c# 代码启动 .bat 文件:
void ExecuteCommand(string command)
{
var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
var process = Process.Start(processInfo);
process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
Console.WriteLine("output>>" + e.Data);
process.BeginOutputReadLine();
process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
Console.WriteLine("error>>" + e.Data);
process.BeginErrorReadLine();
process.WaitForExit();
Console.WriteLine("ExitCode: {0}", process.ExitCode);
process.Close();
}
它开始了,一切都被执行了,但是:
set mydir = "C:\mydir"
xcopy /c /y "myFile.exe" %mydir%
文件没有被复制
但是当我从资源管理器运行相同的批处理文件时,该文件会被复制。有什么想法吗?
【问题讨论】:
-
Process.Start 后 %mydir% 值不正确?
-
"C:\mydir也是个奇怪的targetdir... -
两个可能的事情:(a) 你设置
targetdir但使用mydir- 这是对的吗? (b) 是myFile.exeC# exe 的名称,因为如果是,它可能在程序运行时“正在使用”。 -
这是一个错误,线索是从双击或命令行执行的同一个bat复制文件,但从代码执行,写入回显行,但文件没有被复制。跨度>
-
XCopy.exe 在重定向时非常古怪,如果它的输出被重定向,那么它的输入也必须被重定向。如果不是,那么它无法在没有任何诊断的情况下完成工作。不确定重定向 Cmd.exe 时是否仍然如此。只需尝试一下,也将 processInfo.RedirectStandardInput 设置为 true。
标签: c# batch-file