是否可以在不使用foreach的情况下将所有文件从一个文件夹复制到另一个文件夹?
我的源代码为c:\ test1 * .txt
和目的地为c:\ test2
当我使用文件系统任务执行此操作时,出现以下错误
An error occurred with the following error message: "Illegal characters in path.".
答案 0 :(得分:8)
是的,可以将所有文件从一个文件夹复制到另一个文件夹。下面,我的源代码是C:\ test1,我的目标是C:\ test2。下面的任务会将所有文件从C:\ test1复制到C:\ test2。
您获得的错误是由于源中的星号。你想使用通配符吗?文件系统任务不允许使用通配符。查看File System Task上的文档,下面是摘录:
文件系统任务在单个文件或目录上运行。 因此,此任务不支持使用通配符 对多个文件执行相同的操作。拥有文件 系统任务对多个文件或目录重复操作,put Foreach循环容器中的文件系统任务,如中所述 以下步骤:
配置Foreach循环容器在。的Collection页面上 Foreach循环编辑器,将枚举器设置为Foreach文件枚举器和 输入通配符表达式作为枚举器配置 文件。在Foreach循环编辑器的“变量映射”页面上,映射a 您要用于一次传递一个文件名的变量 文件系统任务。
添加和配置文件系统任务添加 文件系统任务到Foreach循环容器。在常规页面上 文件系统任务编辑器,设置SourceVariable或 DestinationVariable属性到您在中定义的变量 Foreach循环容器。
另一种选择是在脚本任务中编写一个复制例程:
string fileName = string.Empty;
string destFile = string.Empty;
string sourcePath = @"C:\test1";
string targetPath = @"C:\test2";
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
if (System.IO.Directory.Exists(sourcePath))
{
string wildcard = "*.txt";
string[] files = System.IO.Directory.GetFiles(sourcePath, wildcard);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
fileName = System.IO.Path.GetFileName(s);
destFile = System.IO.Path.Combine(targetPath, fileName);
System.IO.File.Copy(s, destFile, true);
}
}
else
{
throw new Exception("Source path does not exist!");
}
答案 1 :(得分:3)
或者执行过程任务:
COPY c:\test1*.txt c:\test2
此代码在减少键盘磨损方面比脚本任务高25倍。 :P