我们使用一种名为Revit的软件,文件保存格式为:filename.rvt。
每当用户编辑一个文件时,Revit会自行将旧文件保存在格式为 filename.xxxx.rvt 的文件中(其中xxx是一个数字)。
随着时间的推移,当文件被编辑数百次时,我们在文件服务器上有很多不必要的文件。
我正在编写一个脚本来实现以下操作:
- 查找并定位包含Revit备份文件的文件夹 - 删除所有旧的Revit备份文件,只保留最近修改的5个
我尝试了以下两种方法。
这种方法的问题在于仅“跳过”了整个搜索结果中的前5个文件,而不是每个文件夹中的前5个文件。
接着我尝试使用循环来解决,但这样并没有解决问题。
有没有关于正确方法和出错原因的想法?
每当用户编辑一个文件时,Revit会自行将旧文件保存在格式为 filename.xxxx.rvt 的文件中(其中xxx是一个数字)。
随着时间的推移,当文件被编辑数百次时,我们在文件服务器上有很多不必要的文件。
我正在编写一个脚本来实现以下操作:
- 查找并定位包含Revit备份文件的文件夹 - 删除所有旧的Revit备份文件,只保留最近修改的5个
我尝试了以下两种方法。
$searchpath = "e:\"
# Find a unique list of directories that contains a revit backup file (*.*.rvt)
$a = Get-ChildItem -Path $searchpath -Include *.*.rvt -Recurse | Select-object Directory -expandproperty FullName | Get-Unique -AsString
# For each folder that contains a single revit backup file (*.*.rvt)...
# - Sort by modified time
# - Select all except first 5
$a | Get-ChildItem -Include *.*.rvt | Sort-Object LastWriteTime -descending | select-object -skip 5 -property Directory,Name,CreationTime,LastWriteTime | Out-GridView -Title "Old Backups" -PassThru
这种方法的问题在于仅“跳过”了整个搜索结果中的前5个文件,而不是每个文件夹中的前5个文件。
接着我尝试使用循环来解决,但这样并没有解决问题。
$searchpath = "e:\"
# Find a unique list of directories that contains a revit backup file (*.*.rvt)
$a = Get-ChildItem -Path $searchpath -Include *.*.rvt -Recurse | Select Directory | Get-Unique -AsString
# For each folder that contains a single revit backup file (*.*.rvt)...
# - Sort by modified time
# - Select all except first 5
$a | foreach {
$b += Get-ChildItem -Path $_.Directory.FullName -Include *.*.rvt | Sort-Object LastWriteTime -descending | select-object -skip 5 -property Directory,Name,CreationTime,LastWriteTime
}
$b | Out-GridView -Title "Old Backups" -PassThru
有没有关于正确方法和出错原因的想法?