我有四个文件xxxxxxCd999,xxxxCf999,xxxxC999,xxxxD999 ...我需要根据文件名将这些文件移动到各自的文件夹中,例如文件xxxxxCd999应该移动到文件夹Cd999,文件xxxxCf999应该移动到文件夹Cf999,文件xxxC999应该移动到文件夹C999,所以... 我如何在ssis中实现这一目标?
我已经为每个循环容器使用了一个,为sourcepath,destinationpath和一个文件系统任务分配了一些变量来使用这些变量,但我现在已经丢失了n不知道如何继续, 请帮助我
答案 0 :(得分:3)
试试这个: -
Foreach Loop
将枚举源文件夹,路径将存储在变量中。在script task
编写代码以使用正则表达式获取文件夹名称。脚本任务值将存储在将在File System Task
包装设计将是
创建3个变量
Name DataType Expression
FolderName string
DestLoc string "D:\\"+ @[User::FolderName]
LoopFiles string
在DestLoc
变量的上述表达式中,根据您的位置更改
根据需要更改源文件夹位置
脚本任务 - 添加2变量,如下所示
您需要从变量LoopFiles
实施例
LoopFiles
变量在运行时将有D:\ForLoop\SampleFolder1.txt
因此,为了从上面的变量中提取文件夹名,请使用正则表达式
打开Edit Script
并编写以下代码
List<string> filePatterns = null;
public void Main()
{
filePatterns = new List<string>();
filePatterns.Add("Folder1");
filePatterns.Add("Folder2");
string fileName = Path.GetFileNameWithoutExtension(Dts.Variables["User::LoopFiles"].Value.ToString());
Match match = Regex.Match(fileName, string.Join("|", filePatterns.ToArray()));
Dts.Variables["User::FolderName"].Value = match.Value;
Dts.TaskResult = (int)ScriptResults.Success;
}
在上面的代码中,您将提取文件夹名称并将其存储在变量FolderName
中。如果您有multiple folders
,则只需将folder names
添加到filePatterns
收集变量。