サブフォルダー構造を維持しながら、ソースディレクトリから宛先ディレクトリにファイルタイプごとに5つの最新ファイルを移動するPSスクリプトに取り組んでいます。たとえば、AB_ で始まるファイルを、ParentFolder1\FolderA、ParentFolder1\FolderB、ParentFolder1\FolderC などから、ParentFolder2\FolderA、ParentFolder2\FolderB、ParentFolder2\FolderC に移動したいと考えています。
親フォルダー1
--FolderA
----AB_1234.txt
----AB_5678.txt
----XY_9876.txt
----XY_9876.txt
--FolderB
----AB_1234.txt
----AB_5678.txt
----XY_9876.txt
----XY_9876.txt
--FolderC
----AB_1234.txt
----AB_5678.txt
----XY_9876.txt
----XY_9876.txt
これを for ループに結び付ける方法はありますか? これが私がこれまでに持っているものです:
$source = "C:\Test"
$dest = "E:\archive"
$AB = Get-ChildItem -Path $source -include AB_* -Recurse | Where-Object {-not $_.PsIsContainer}
$XY = Get-ChildItem -Path $source -include XY_* -Recurse | Where-Object {-not $_.PsIsContainer}
$keep = 5
$logfile = "E:\_archive\temp\log_{0:MM-dd-yyyy}.log" -f (Get-Date)
if ($AB.Count -gt $keep) {
$AB | Sort -property LastWriteTime | Select-Object -First ($AB.Count - $keep) | Move-Item -destination $dest\AB -Force -Verbose
}
Else
{"No AB_ files to archive." | Out-File $LogFile -Append -Force}
if ($XY.Count -gt $keep) {
$XY | Sort -property LastWriteTime | Select-Object -First ($XY.Count - $keep) | Move-Item -destination $dest\XY -Force -Verbose
}
Else
{"No XY_ files to archive." | Out-File $LogFile -Append -Force}