Powershell比较Lastwritedate并删除文件
问题描述:
我真的想“结束”这个脚本。我已经创建了一个小脚本,但只有一个即时消息只能从我输入的第一个字典中删除这些文件。Powershell比较Lastwritedate并删除文件
脚本应该比较两个文件夹,并且如果存在具有相同名称的文件,我想选择是否删除旧版本或新版本。
//编辑
$path1 = Read-Host "Name the 1st Path"
$path2 = Read-Host "Name the 2nd Path"
$Folder1 = Get-ChildItem -Path $pfad1 -Recurse
$Folder2 = Get-ChildItem -Path $pfad2 -Recurse
Write-Host "####################################"
Write-Host (Get-ChildItem $pfad1,$pfad2).count
Write-Host "Files are in the folder"
Write-Host "####################################"
$frage = Read-Host "Are you sure you want to delete the files YES/NO ?"
if ($frage -eq $NO) { "Files stay " ; exit }
else {
Compare-Object -ReferenceObject $Folder1 -DifferenceObject $Folder2
-IncludeEqual |
Where-Object {$_.SideIndicator -eq "=="} |
ForEach-Object {
Remove-Item $_.InputObject.FullName | where { $_.lastwritetime -lt $altdate }
}
}
答
根据您的文件夹的大小,这可能不是这样做的最高效的方式。但它确实有效。
$files = $folder1 + $folder2
$files |
Group-Object name |
Foreach-Object {
$_.Group |
Sort-Object LastWriteTime |
Select-Object -Last 1
} |
Remove-Item -Force
好的。 Iv'e重做了我原来的回答,以解决它的一些缺点。这个答案使您能够使用测试代码查看将被删除和保留的内容。我知道我可以使用一个适当的详细开关和whatif功能,但这似乎更容易。我解决了订购问题和非重复项目将被删除的问题。
$folder1 = 'c:\temp\reports1'
$folder2 = 'c:\temp\reports2'
function Get-FilesForDeletion ($folder1, $folder2, [switch] $verbose){
$files1 = Get-ChildItem $folder1
$files2 = Get-ChildItem $folder2
$files = $files1 + $files2
$i = ($files | Select-Object -ExpandProperty Directory | Measure-Object -Maximum -Property Length).Maximum
$files |
Group-Object name |
Where-Object Count -gt 1 |
Foreach-Object {
$process = $_
$deleteMe = $process.Group |
Sort-Object LastWriteTime -Descending |
Select-Object -Last 1
if($verbose){
Write-Host "Processing $($process.Group.Name)..."
$keepThese = $process.Group |
Sort-Object LastWriteTime |
Select-Object -Skip 1
Write-Host " - Delete $(($deleteMe.Directory.FullName).PadRight($i)) - LastWriteTime $($deleteMe.lastWriteTime) "
$keepThese | ForEach-Object {
Write-Host " - Keep $(($_.Directory.FullName).PadRight($i)) - LastWriteTime $($_.lastWriteTime) "
}
write-host " "
write-host " "
}
$deleteMe
}
}
# testing code
#Get-FilesForDeletion -folder1 $folder1 -folder2 $folder2 -verbose | Out-Null
Get-FilesForDeletion -folder1 $folder1 -folder2 $folder2 -verbose | Remove-Item
请添加您到目前为止尝试过的内容,并将您的问题限制为特定问题。 SO不是编写代码的页面 –
完成,ty为信息 – BGL