スクリプト タスクがなくても、1 つの変数だけで実行できますUser::FILE_NAME。
foreach loopディレクトリでを使用し、FILE_NAMEそのタスクから を入力します。データ フロー変換を介してファイルを処理します。次に、ファイルを移動します。次に、foreach loop続行します。ファイルを段階的に移動することで、何が成功し、何が失敗したかを正確に知ることができ、正しく処理されたファイルをロールバックして最初からやり直すことなく、プロセスを再開できます。
すべてを移動するのを待ちたい場合は、2 段階の移動を行うことができます。1 は上記と同じロジックで、元のディレクトリにある .processed または何かに名前を変更するだけです。次に、そのループが終了した後、foreach処理されたファイルに別のフィルタリングを追加し、同じFILE_NAME変数を使用してファイルを移動します。
script taskどちらの状況でも必要はありません。
本当に使いたいならscript task. のscript task後に を入れてDFTくださいforeach loop。または何かobjectを保持するタイプの別の変数を用意します。datatableそれにDataTableファイル名などを入力します。その後、テーブルをロードして処理するファイル名を取得するforeach必要があります。another script task正直なところ、最後のステップではsystem.io、スクリプト内でファイルを使用して移動するのが最も簡単です。
次のような変数をどのように使用しますdatatableか (これは自由に書いているので、追加の手順とエラー チェックが必要になる可能性があります)。
ファイル名をDataTableに入力するには、File_Name変数を読み取りDataTableVariableName可能にし、スクリプト タスクに対して読み取り/書き込み可能にしてから、次のように開始します。
実際には、この行の前にユーザーの null をテストする必要があるかもしれvariable.valueません。私は肯定的ではありません。
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
if (dt == null)
{
Write code to create your datatable
}
Add new DataRow to table -- lots of results on web about this and creating datatable.
これで、datatable. foreach loopを追加した後script task、処理されたファイルを移動します。
再び、変数からテーブルを取得することから始めます
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
次にループしてdatatable、ここにもファイルを移動することをお勧めします。
foreach (dt datarow in dt.rows)
{
typically I like to suggest copying and then deleting the source file depending on how you over write. so you would do something like.
If (system.io.file.Exists(dr.["FileNameRowLable"].ToString())
{
system.io.file.copy(source, destination);
if (file.exists(destination))
{
file.delete(source);
}
}
}
f でファイルを移動することに固執する方が幸せになると思いますoreach loopので、スクリプトタスクは必要ありません。