递归处理文件夹结构但不包括最低级别的最新文件
Coping folder structure recursively but excluding newest file at lowest level
我正在尝试创建一个 PowerShell 脚本,它将递归搜索 subfolders/files 并将它们复制到新位置,同时保留结构。我已经在下面实现了这一点,但还想删除每个最低子目录中的最新文件。
文件夹结构:
C:\engines\analytics1\pa.kr
C:\engines\analytics1\pa419.kdb
C:\engines\analytics1\pa420.kdb
C:\engines\analytics1\pa421.kdb(最新文件)
C:\engines\analytics2\pb.kr
C:\engines\analytics2\pb240.kdb
C:\engines\analytics2\pb241.kdb(最新文件)
我的需要是排除 pa421.kdb
& pb241.kdb
文件并递归复制其他所有内容。我已经用嵌套 Get-ChildItem
方法尝试了很多方法,并用 -Skip 1
逻辑降低了创建时间,但无法让它工作。
if ($env:COMPUTERNAME.Contains("Test")) {
$root_path = "C:"
$backup_folder = "Appian\Backup"
}
$date = Get-Date -Format d.MMMM.yyyy.HH.mm.ss
New-PSDrive -Name "Backup" -PSProvider Filesystem -Root
$root_path$backup_folder
$source1 = $root_path + "\engines"
$destination = "backup:$date"
$path = Test-Path $destination
if ($path -eq $true) {
#write-Host "Directory Already exists"
Remove-PSDrive "Backup"# -Force
} elseif ($path -eq $false) {
cd backup:\
mkdir $date
Get-ChildItem $source1 -Recurse | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $_.FullName.Replace($source1, $destination + "\engines") -Force
}
#$backup_log = Dir -Recurse $destination | Out-File "$destination\backup_log.txt"
}
构建要排除的文件列表:
$exclude = Get-ChildItem C:\engines\*\*.kdb | Group-Object Directory | ForEach-Object {
$_.Group | Sort-Object -Desc | Select-Object -First 1 -Expand FullName
}
然后递归到C:\engines
,从结果列表中排除那些文件,并复制其余的:
Get-ChildItem C:\engines -Recurse -File | Where-Object {
$exclude -notcontains $_.FullName
} | Copy-Item -Destination { $_.FullName -replace '^C:', $destination }
我正在尝试创建一个 PowerShell 脚本,它将递归搜索 subfolders/files 并将它们复制到新位置,同时保留结构。我已经在下面实现了这一点,但还想删除每个最低子目录中的最新文件。
文件夹结构:
C:\engines\analytics1\pa.kr
C:\engines\analytics1\pa419.kdb
C:\engines\analytics1\pa420.kdb
C:\engines\analytics1\pa421.kdb(最新文件)
C:\engines\analytics2\pb.kr
C:\engines\analytics2\pb240.kdb
C:\engines\analytics2\pb241.kdb(最新文件)
我的需要是排除 pa421.kdb
& pb241.kdb
文件并递归复制其他所有内容。我已经用嵌套 Get-ChildItem
方法尝试了很多方法,并用 -Skip 1
逻辑降低了创建时间,但无法让它工作。
if ($env:COMPUTERNAME.Contains("Test")) {
$root_path = "C:"
$backup_folder = "Appian\Backup"
}
$date = Get-Date -Format d.MMMM.yyyy.HH.mm.ss
New-PSDrive -Name "Backup" -PSProvider Filesystem -Root
$root_path$backup_folder
$source1 = $root_path + "\engines"
$destination = "backup:$date"
$path = Test-Path $destination
if ($path -eq $true) {
#write-Host "Directory Already exists"
Remove-PSDrive "Backup"# -Force
} elseif ($path -eq $false) {
cd backup:\
mkdir $date
Get-ChildItem $source1 -Recurse | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $_.FullName.Replace($source1, $destination + "\engines") -Force
}
#$backup_log = Dir -Recurse $destination | Out-File "$destination\backup_log.txt"
}
构建要排除的文件列表:
$exclude = Get-ChildItem C:\engines\*\*.kdb | Group-Object Directory | ForEach-Object {
$_.Group | Sort-Object -Desc | Select-Object -First 1 -Expand FullName
}
然后递归到C:\engines
,从结果列表中排除那些文件,并复制其余的:
Get-ChildItem C:\engines -Recurse -File | Where-Object {
$exclude -notcontains $_.FullName
} | Copy-Item -Destination { $_.FullName -replace '^C:', $destination }