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