我正在使用PS脚本将文件类型的5个最新文件从源目录移动到目标目录,同时保留子文件夹结构。例如,我想将任何以AB_开头的文件从ParentFolder1 \ FolderA,ParentFolder1 \ FolderB,ParentFolder1 \ FolderC等移动到ParentFolder2 \ FolderA,ParentFolder2 \ FolderB,ParentFolder2 \ FolderC。
ParentFolder1
- 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}
答案 0 :(得分:2)
function Move-Newest-Files
{
param (
[parameter(Mandatory = $true)] [string] $source,
[parameter(Mandatory = $true)] [string] $destination,
[parameter(Mandatory = $true)] [array] $filter,
[parameter(Mandatory = $false)][int] $keep = 5
)
try
{
$source = Resolve-Path $source
$list = Get-ChildItem -Path $source -Include $filter -Recurse -Force |
Where-Object { -not $_.psIsContainer } |
Sort-Object -property LastWriteTime -descending |
Select-Object -First $keep
foreach ($file in $list)
{
$destfile = $file -replace [regex]::Escape($source), $destination
$destpath = Split-Path $destfile -Parent
if (!(Test-Path $destpath))
{ $null = New-Item -ItemType Container -Path $destpath }
Move-Item $file -Force -Destination $destfile
}
}
catch
{
Write-Host "$($MyInvocation.InvocationName): $_"
}
}
Move-Newest-Files . "D:\xyzzy" @("*.cs", "*.txt", "*.exe") 10
答案 1 :(得分:0)
使用Robocopy可能会更好。