【问题标题】:Windows CMD: List files in dir & subdir WITHOUT given extensionsWindows CMD:在没有给定扩展名的情况下列出目录和子目录中的文件
【发布时间】:2011-06-09 14:34:12
【问题描述】:

我想递归搜索一个目录并查找没有特定扩展名的文件,或者确切地说,没有特定扩展名集的文件。

Sketch:在“dir”中查找所有没有“ext1”、“ext2”、“ext3”的文件并将结果打印到.txt

我用 DIR 和 ATTRIB 尝试了大约几个小时,但不幸的是没有取得更大的成功。

高度重视您的考虑!谢谢。

【问题讨论】:

  • 如果您安装 cygwin 并使用例如find.
  • 安装cygwin?!你疯了吗,这是对一个微不足道的问题的严重过度的解决方案。如果您需要更多工具,那么一些本机工具(例如 GnuWin32)会更重要。例如,这是 grep 中的一个衬里。正如 LittleBobbyTables 指出的那样,它可以由 cmd 解释器本地完成。
  • @David:不是原生的,而是几乎随处可用的工具(findstr 不是cmd 的内置命令,而dir 是)。不过,同意将 cygwin 带入其中的疯狂。

标签: windows file list shell command-line


【解决方案1】:

试试这个:

dir /b /s /a-d | findstr /vi ".ext1$ .ext2$ .ext3$"

/a-d 开关排除目录,只为您提供文件。 findstr 参数允许您在文件中搜索字符串,/vi 开关指示排除包含下一个参数的文件,搜索不区分大小写。

正如 Joey 指出的那样,$ 是表示行尾所必需的。

【讨论】:

  • +1 是一个漂亮而优雅的解决方案。但请注意用户:如果您的 Unicode 文件名无法以所选 OEM 字符集表示并且您在cmd 中启用了光栅字体,那么这将破坏文件名并且您不能对他们做任何事情。
  • 另一个旁注:这不会过滤扩展名,而是文件名的子字符串。因此,如果您有一个名为 foo.ext1.bar 的文件,它也会被过滤掉。
  • 这绝对是一种魅力。正是我正在寻找的表达方式。非常感谢。
  • @Joey:我可以通过级联 findstr 来防止子字符串问题吗?例如:dir /b /s /a-d | findstr /vi ".ext1" | findstr /vi ".ext2"
  • @Joey -- 天哪,忘记了 $ 符号。我已经更新了查询,所以它应该只排除以扩展名结尾的文件。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多