使用cmdshell合并目录的内容

本文关键字:cmdshell 合并 使用 | 更新日期: 2023-09-27 18:23:51

我想将一个目录中的所有文件合并为一个。然而,我尝试了几个版本,但似乎都不起作用。我收到一个错误,说找不到文件。以下是我正在尝试的:

        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"的未处理异常

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

使用cmdshell合并目录的内容

尝试启动cmd,而不是用进程"启动"。

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

"copy"是命令提示符下的一个命令,别名为…something,而不是windows知道如何运行的实际文件本身(在命令提示符外)。

Process类的一些属性可以用来抑制shell弹出的窗口,如果你不希望它在程序运行时出现在屏幕上。

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

Process.Start("copy", command);

更新:

好吧,这是一个打字错误。你的inputFolder文本怎么样?它是否对目录使用双反斜杠(转义反斜杠)?如同在所有'中一样,字符应该是''

您需要使用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。