在c#中执行具有path依赖的batch file

我有一个bat文件,它将文件从一个目录复制到另一个目录。 如果这个bat文件是手动点击,文件被成功复制,没有问题。 但是,如果通过C#执行bat文件,cmd窗口中将显示“找不到文件”消息。

这是我的bat文件。

echo off echo. XCOPY "..\SourceFolder\CaSourceFile" "..\DestinationFolder\SubFolder" /r /Y /i /F 

如果在bat文件中给出完整path,则文件被成功复制。 例,

 XCOPY "D:\RootFolder\SourceFolder\CaSourceFile" "D:\RootFolder\DestinationFolder\SubFolder" /r /Y /i /F 

我的C#代码:

 ProcessStartInfo processInfo = new ProcessStartInfo(batchFile); processInfo.UseShellExecute = true; Process batchProcess = new Process(); batchProcess.StartInfo.FileName = "cmd.exe"; batchProcess.StartInfo = processInfo; batchProcess.StartInfo.Arguments = String.Format("\"{0}\" \"{1}\"", @"D:\Europa\Test Release Tool\SingleExeInstaller\EuropaApplication", @"D:\Europa\Test Release Tool\SingleExeInstaller\EuropaInstaller"); batchProcess.StartInfo.RedirectStandardInput = true; batchProcess.StartInfo.RedirectStandardOutput = true; batchProcess.StartInfo.RedirectStandardError = true; batchProcess.Start(); batchProcess.WaitForExit(); 

我的应用程序的exe文件在C:中可用,bat文件在D中可用:是否有任何想法来解决这个问题? 请帮助我。

您需要在StartInfo上设置WorkingDirectory ; 批处理文件中的相对路径因此而关闭。 这应该是可能的批处理文件的路径

 batchProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(batchFile); 

你试图使用的路径是相对路径,问题是它们相对于什么。

当从命令行运行bat文件时,它们将相对于使用cd命令设置的当前目录,并且可能是您的.bat文件所在的目录。当从C#exe文件运行bat时,当前目录将是您的exe文件所在的目录。

当前目录也被称为WorkingDirectory。 为了使用不同的目录,请尝试在ProcessStartInfo对象上设置WorkingDirectory属性。

我希望你需要在StartInfo中设置工作目录请参阅.NET Process.Start默认目录?

通过C#将文件从一个文件夹复制到另一个文件夹更容易。

简单的例子:

 using System.IO; string sourcePath = "C:\test"; string targetPath = "D:\test_new"; if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } foreach (var srcPath in Directory.GetFiles(sourcePath)) { //Copy the file from sourcepath and place into mentioned target path, //Overwrite the file if same file is exist in target path File.Copy(srcPath, srcPath.Replace(sourcePath, targetPath), true); } 

关于file.copy的更多细节你可以像往常一样在MSDN上找到))) – http://msdn.microsoft.com/en-us/library/system.io.file.copy.aspx