【问题标题】:Executing Batch file which has path dependency in c#在c#中执行具有路径依赖的批处理文件
【发布时间】:2014-05-21 13:12:27
【问题描述】:

我有一个 bat 文件,它将文件从一个目录复制到另一个目录。 如果手动单击此 bat 文件,则会成功复制文件,并且不会出现任何问题。但是如果通过C#执行bat文件,cmd窗口会显示“files not found”信息。

这是我的 bat 文件。

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

【问题讨论】:

标签: c# windows batch-file


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        通过 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-24
          • 2012-08-21
          • 1970-01-01
          • 2015-04-19
          相关资源
          最近更新 更多