Windows での高速ファイルコピー スクリプト

Windows での高速ファイルコピー スクリプト

毎月実行されるプロセスがあります。このプロセスでは、一連のファイルを識別し、DB 内のさまざまなテーブルの複数のフィールドから適切なソース パスと宛先パスを構築して、これらのファイルすべてをコピーします。そのため、パスの数は数十万または数百万になる可能性があります。これらのパスは、以前にコピーされたが変更済みのファイルを指している可能性があります。

このコピーをできるだけ速く実行するにはどうすればよいですか?

最初は、結果のパスごとにファイルが宛先パスに存在するかどうかをチェックする単純な巨大な cmd スクリプトを試し、存在しない場合はコピーしようとしましたが、変更されたファイルはスキップされました。そこで、/D スイッチと /Y スイッチを使用してプロンプトを黙って確認することで、日付が同じ場合に上書きを回避するために「xcopy」を使用しようとしましたが、実際には、数十万の xcopy コマンドを含む巨大なスクリプトは永遠に時間がかかり、これらのファイルの一部またはほとんどが同じ日付で既に存在する場合、速度が向上しないことがわかります。役立つアイデアはありますか? 数百のソース パスと宛先パスを含むファイルを使用して、これらすべてのコピーを作成するにはどうすればよいでしょうか? xcopy よりも高速な代替手段はありますか? または、より高速な日付チェックを行ってから任意のコピー コマンドを呼び出す方法はありますか?

現在、DB 情報に基づいてファイルを取得およびコピーする方法の詳細な説明: DB には複数のテーブルがあります。

表 1: ID、Dir_Name、...

表 2: ID、Dir_Name、...

...

テーブル N: ID、Dir_Name、...

ソース フォルダー パス テーブル: Dir_Name、Dir_FullPath

宛先フォルダ パス テーブル: Dir_Name、Dir_FullPath

次に、コピーコマンドのセットを作成します(または、ソースと宛先のパスを取得します)。

Select 'xcopy /d /y '|| T2.Dir_FullPath || '\\' || ID || '.ext ' || T3.Dir_FullPath || '\\' || ID || '.ext*' 
from Table1 T1 
left join SourceFolderPathsTable T2 on T1.Dir_Name=T2.Dir_Name
left join DestFolderPathsTable T3 T1.Dir_Name=T3.Dir_Name where T1.some_criteria=true;

ありがとう!

答え1

Windows に付属するコマンド ライン ツール「robocopy」を見てください。応答ファイルを受け入れる可能性があり、日付/時刻が変更されたファイルのみを更新するように指示できます。また、GUI オーバーヘッドのない純粋なコマンド ラインであるため、可能な限り高速です。

関連情報