次のスクリプトを使用して、2013年1月1日より前にすべてをアーカイブしています。
foreach ($i in Get-ChildItem "O:\Projects” -Force -Recurse)
{
if ($i.LastWriteTime -gt ($(Get-Date).AddDays(-649)))
{
robocopy $i.FullName "A:\Operations\Projects" /Z /S /MOVE /MIR
}
}
問題は、スクリプトが正確なディレクトリツリーをコピーしていないことです。適切なファイルを含むフォルダをターゲットディレクトリのルートにコピーするだけです。
例として、これはフォルダー構造を表します。
- プロジェクトA
- 見積もり
- QuoteA.pdf(最終更新2011年6月)
- 見切り
- CloseoutA.pdf(最終変更日2011年11月)
- 見積もり
- プロジェクトB
- 見積もり
- QuoteB.pdf(最終変更日2012年10月)
- 見切り
- CloseoutB.pdf(最終変更日2013年4月)
- 見積もり
上記のスクリプトでは、次のターゲットフォルダが作成されます。
- 見積もり
- QuoteA.pdf
- QuoteB.pdf
- 見切り
- CloseoutA.pdf
上記の例は非常に基本的なものです。一部のファイルは、8または9フォルダーの深さです。ソースディレクトリ内には約30,000個のフォルダーがあります。移動中に適切なファイルの完全なパスをそのままにしておく必要がありますが、どうすればそれを実現できますか?