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

时间:2016-04-06 10:31:45

标签: c# batch-file process

我有一个运行批处理文件的非常简单的方法。方法是这样的:

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 = _binnPath + "\\DumpFileSystem.bat";行上

我收到了这个:

  

未处理的类型' System.ComponentModel.Win32Exception'   发生在System.dll

中      

附加信息:系统找不到指定的文件

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

问题

  1. 如何运行批处理文件?和

  2. 为什么变量的设置甚至不能查找文件时会抛出错误?

2 个答案:

答案 0 :(得分:2)

删除这些代码

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

你必须改变流程开始

{{1}}

答案 1 :(得分:1)

  1. 您应该只显式传递批次和参数的路径。否则,Windows会尝试将参数合并到不存在的路径中。
  2. 这是Visual Studio中经常由旧文件或代码优化引起的视错觉。
  3. 请看这里: https://stackoverflow.com/a/5766669/6082960