查找与具有其他扩展名的文件位于同一文件夹中的所有具有指定扩展名的文件

查找与具有其他扩展名的文件位于同一文件夹中的所有具有指定扩展名的文件

我想清理*.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

改编自ghisler.ch(官方 TC 论坛)上的这个主题

如果经常使用,您还可以创建一个专用的过滤器按钮:请参阅上面的线程。


编辑:在文件名旁边显示路径可能会很有用。

右键点击状态栏,选择“自定义列”,然后选择“新建”。添加一列,在“字段内容”下选择“路径”,或输入[=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()
    }
  }
}

相关内容