C#给变量赋值表示它找不到文件?

C#给变量赋值表示它找不到文件?,c#,batch-file,process,C#,Batch File,Process,我有一个非常简单的方法来运行批处理文件。方法如下: private string _binnPath = Application.StartupPath + "\\Binn"; public void DumpFileSystem(string snapshotFolder) { var cwd = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(_binnPath); var snaps

我有一个非常简单的方法来运行批处理文件。方法如下:

private  string _binnPath = Application.StartupPath + "\\Binn";

public void DumpFileSystem(string snapshotFolder)
{
    var cwd = Directory.GetCurrentDirectory();
    Directory.SetCurrentDirectory(_binnPath);

    var snapshotOutput = Path.Combine(Application.StartupPath, snapshotFolder);
    snapshotOutput = Path.Combine(snapshotOutput, DateTime.UtcNow.Ticks + "-files.txt");

    var batCommand = _binnPath + "\\DumpFileSystem.bat";
    string batFilename = batCommand + " " + snapshotOutput;

    using (var process = Process.Start(batFilename))
    {
        process?.WaitForExit();
    }

    Directory.SetCurrentDirectory(cwd);
}
批处理文件如下所示:

dir /s c:\ >  %1
var batCommand=\u binnPath+“\\DumpFileSystem.bat”行上我收到这个:

“System.ComponentModel.Win32Exception”类型的未处理异常 发生在System.dll中

其他信息:系统找不到指定的文件

这毫无意义,因为我只分配了一个变量。 我要做的就是使用snapshotOutput变量运行批处理文件。 这应该没那么难

问题

  • 你知道如何运行批处理文件吗?及

  • 当变量的设置甚至不应该查找文件时,为什么会抛出错误

  • 您应该只显式地传递批处理的路径和参数。否则windows会尝试将参数合并到不存在的路径中
  • 这是VisualStudio中的一种错觉,通常是由旧文件或代码优化引起的 请看这里:

  • 您应该只显式地传递批处理的路径和参数。否则windows会尝试将参数合并到不存在的路径中
  • 这是VisualStudio中的一种错觉,通常是由旧文件或代码优化引起的 请看这里: 删除这些代码

    string batFilename = batCommand + " " + snapshotOutput;
    
    您必须更改流程开始

    Process.Start(new ProcessStartInfo(batCommand , snapshotOutput))
    
    删除这些代码

    string batFilename = batCommand + " " + snapshotOutput;
    
    您必须更改流程开始

    Process.Start(new ProcessStartInfo(batCommand , snapshotOutput))
    

    在Process.Start(batFilename)上放置一个断点,调试并停止,查看batFilename的值并检查文件是否位于您期望的位置。更改是文件不在%APPROOT%/bin/debug/Binn文件夹中,我认为可能是因为您试图将参数传递到应该是路径的内容中。为什么调用SetCurrentDirectory函数?你试着注释掉那一行了吗?在Process.Start(batFilename)上放置一个断点,调试并停止,查看batFilename的值并检查文件是否在你期望的位置。更改是文件不在%APPROOT%/bin/debug/Binn文件夹中,我认为可能是因为您试图将参数传递到应该是路径的内容中。为什么调用SetCurrentDirectory函数?你试过评论那句话吗?直截了当。甚至比我自己的答案更喜欢它。好吧,这很有效——但为什么呢?你说我应该删除的那行只是一个变量赋值。“当错误发生时,我还没有开始运行进程。@Toxantron说得对:“这是Visual Studio中的一种错觉,通常是由较旧的文件或代码优化引起的。”错误出现在“process.Start”中,但Visual Studio在上面一行抛出异常。我建议在Process.Start之前在行上发出一个Console.Writeline,它将在两个版本中执行…直截了当。甚至比我自己的答案更喜欢它。好吧,这很有效——但为什么呢?你说我应该删除的那行只是一个变量赋值。“当错误发生时,我还没有开始运行进程。@Toxantron说得对:“这是Visual Studio中的一种错觉,通常是由较旧的文件或代码优化引起的。”错误出现在“process.Start”中,但Visual Studio在上面一行抛出异常。我建议在Process.Start之前在行上发出Console.Writeline,它将在两个版本中执行。。。