我想清理*.bak
某些程序自动创建的备份文件。这些文件可能无处不在。还有一些*.bak
文件我想保留。
所有*.bak
我想要删除的文件都与至少 1 个*.dwg
文件一起放在文件夹中。
如何查找(并删除)这些文件?最好使用 Total Commander。
//添加于 2021 年 12 月 17 日 14:00 CET 考虑:
c:\1\
c:\1\x.bak <remove
c:\1\y.dwg
c:\1\2\x.bak <keep
c:\2\x.bak <keep
c:\2\2\x.bak <keep
c:\2\2\3\x.dwg
答案1
这是一种过滤 *.bak 和 *.dwg 文件的方法。然后您必须手动比较文件名并选择需要保留的内容。
(Total Commander 还支持脚本,使用 PowerPro或者使用 WinScript。但是,从头开始编写脚本超出了本论坛的讨论范围。
在 Total Commander 中,导航到您的基本文件夹/用户文件夹,然后执行以下操作:
- 定义过滤器:CTRL+ F12,设置
*.bak *.dwg
为过滤器类型 - 切换分支视图:CTRL+ B(分支视图包括所有子文件夹)
- 选择您需要删除的文件(或按CTRL“+”A选择全部)
- 点击DEL,接受删除(或SHIFT+DEL以避免进入回收站)
- 重置过滤器使用CTRL+F10
如果经常使用,您还可以创建一个专用的过滤器按钮:请参阅上面的线程。
编辑:在文件名旁边显示路径可能会很有用。
右键点击状态栏,选择“自定义列”,然后选择“新建”。添加一列,在“字段内容”下选择“路径”,或输入[=tc.path]
,如下图所示
答案2
我使用 PowerShell 命令(命令链)解决了这个问题
以下是单行版本:
[array]$dirs = (Get-Item .); $dirs += Get-ChildItem -Directory -Recurse; forEach ($dir in $dirs){$files = Get-ChildItem -path $dir.fullname -filter "*.bak"; if ((Get-ChildItem -Path $dir.fullname -filter "*.dwg").count -gt 0){foreach ($delfile in $files){Write-Host $delfile.fullname;<# $delfile.delete() #>}}}
<# #>
除非您删除最后一个命令周围的注释(),否则它不会删除任何内容。
解释:
# Create an array with current folder and all (non-empty) subfolders
[array]$dirs = (Get-Item .); $dirs += Get-ChildItem -Directory -Recurse
# For each element in the array (folder)
foreach ($dir in $dirs){
#Get all files ending with .bak
$files = Get-ChildItem -path $dir.fullname -filter "*.bak"
# If there is more than 0 files ending with .dwg
if ((Get-ChildItem -Path $dir.fullname -filter "*.dwg").count -gt 0){
# For each file ending with .bak
foreach ($delfile in $files){
# Write a path of the file
Write-Host $delfile.fullname
# Permanently delete the file
$delfile.delete()
}
}
}