スクリプト タスクがなくても、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
ので、スクリプトタスクは必要ありません。