使用cmd shell合并目录的内容

时间:2012-02-07 14:18:23

标签: c# visual-studio .net-4.0

我想将目录中的所有文件合并为一个。但是我尝试了几个版本但它们似乎都没有用。我收到一个错误,说找不到该文件。这就是我的尝试:

        String outputFile = this.outputTxt.Text;
        String inputFolder = this.inputTxt.Text;
        String files = "";
        String command;
        foreach (String f in Directory.GetFiles(inputFolder))
        {
            files += f+"+";
        }
        files = files.Substring(0, files.Length - 1);
        command = files + " " + outputFile;

        Process.Start("copy",command);

我想要获得的样本: 复制a.txt + b.txt + c.txt + d.txt output.txt

我得到的错误是:

System.dll中出现未处理的“System.ComponentModel.Win32Exception”类型异常

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

3 个答案:

答案 0 :(得分:5)

尝试使用进程启动cmd而不是“start”。

Process.Start("cmd", "copy " + command);

'copy'是命令提示符中的命令,别名为......某个东西,而不是Windows知道如何运行的实际文件本身(在命令提示符之外)。

如果在程序运行时不想在屏幕上显示shell,则可以使用Process类的属性来抑制shell弹出的窗口。

答案 1 :(得分:4)

您是否应该使用command代替files作为Process.Start的第二个参数?

Process.Start("copy", command);

更新:

好的,所以这是一个错字。你的inputFolder文本怎么样?是否对目录使用双反斜杠(转义反斜杠)?与所有\个字符一样,\\

答案 2 :(得分:2)

您需要使用copy命令和参数调用cmd.exe(如@Servy所述)。以下是您所需代码的清理版本:

    String outputFile = this.outputTxt.Text;
    String inputFolder = this.inputTxt.Text;
    StringBuilder files = new StringBuilder();
    foreach (String f in Directory.EnumerateFiles(inputFolder))
    {
        files.Append(f).Append("+");
    }
    files = files.Remove(file.Length-1, 1); // Remove trailing plus
    files.Append(" ").Append(outputFile);      

    using (var proc = Process.Start("cmd.exe", "/C copy " + files.ToString()))
    {
        proc.WaitForExit();
    }

你需要处理Process(因此使用using语句),因为你连接了很多字符串(可能还有很多字符串),你应该使用StringBuilder。