在c#中执行具有路径依赖性的批处理文件

时间:2014-05-21 13:12:27

标签: c# windows batch-file

我有一个bat文件,它将文件从一个目录复制到另一个目录。 如果手动单击此bat文件,则会成功复制文件,并且不会出现任何问题。但是如果bat文件是通过C#执行的,则#34;文件未找到"消息显示在cmd窗口中。

这是我的蝙蝠档案。

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

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

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中可用:有什么想法来解决这个问题吗?请帮助我。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

当前目录也称为WorkingDirectory。要使用其他目录,请尝试在ProcessStartInfo对象上设置WorkingDirectory属性。

答案 2 :(得分:1)

我希望您需要在StartInfo中设置工作目录 见.NET Process.Start default directory?

答案 3 :(得分:0)

通过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);
}

您可以像往常一样在MSDN上找到有关file.copy的更多详细信息))) - http://msdn.microsoft.com/en-us/library/system.io.file.copy.aspx