1

xxxxxxCd999、xxxxCf999、xxxxC999、xxxxD999 の 4 つのファイルがあります ... ファイル名に基づいて、これらのファイルをそれぞれのフォルダーに移動する必要があります。 xxxC999 はフォルダ C999 などに移動する必要があります... ssis でこれを達成するにはどうすればよいですか?

for each ループ コンテナーを使用し、sourcepath、destinationpath にいくつかの変数を割り当て、これらの変数を使用するファイル システム タスクを使用しましたが、どうすればよいかわかりません。親切に助けてください

4

1 に答える 1

3

これを試して :-

Foreach Loopソース フォルダーを列挙し、パスは変数に格納されます。正規表現を使用してフォルダ名を取得するscript taskコードを記述します。スクリプト タスクの値は、別の変数に格納されます。File System Task

パッケージデザインは

ここに画像の説明を入力

  • 3 つの変数を作成する

     Name         DataType   Expression
     FolderName    string
     DestLoc       string     "D:\\"+ @[User::FolderName]   
     LoopFiles     string
    

上記のDestLoc変数の式で、場所に応じて変更します

  • ForEach ループ構成 ここに画像の説明を入力

ここに画像の説明を入力

必要に応じてソース フォルダーの場所を変更します。

  • スクリプト タスク - 以下のように 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 namesfilePatterns

  • ファイル システム タスクの構成

ここに画像の説明を入力

于 2013-03-08T07:39:32.270 に答える