使用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"的未处理异常
附加信息:系统找不到指定的文件
尝试启动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。