Windows CMD:列出目录和子目录中没有给定扩展名的文件

8
我想要递归搜索一个目录并找到没有特定扩展名的文件,或者确切地说,找到没有一组特定扩展名的文件。
思路:在“dir”中查找所有没有“ext1”,“ext2”,“ext3”扩展名的文件,并将结果打印到.txt文件中。
我已经尝试了几个小时的DIR和ATTRIB,但是很遗憾没有什么大的进展。
非常感谢您的考虑!

如果安装Cygwin并使用例如find可能会更容易。 - Paul R
5
安装cygwin?你疯了吗,这是对一个小问题的严重过度解决。如果你需要更多工具,那么一些本地的工具(例如GnuWin32)会更加适合。比如在grep中只需一行命令就可以解决。正如LittleBobbyTables所指出的,它也可以通过cmd解释器本地完成。 - David Heffernan
@David:虽然没有原生支持,但几乎所有地方都可以使用可用的工具(findstr不是cmd的内置命令,而dir是)。不过,把cygwin带进来确实有点疯狂。 - Joey
1个回答

14

试试这个:

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

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

正如 Joey 指出的那样,$ 是必须的,以指示行末。


1
+1 优雅简洁的解决方案。但是要提醒用户:如果您有无法在所选的 OEM 字符集中表示的 Unicode 文件名 并且cmd 中启用了点阵字体,那么这将破坏文件名,您将无法对其进行任何操作。 - Joey
另外需要注意的是:这不会过滤扩展名,而是文件名的子字符串。因此,如果您有一个名为foo.ext1.bar的文件,它也将被过滤掉。 - Joey
非常好用,正是我想要的表达方式。非常感谢。 - DapperDan
@Joey:我可以通过级联使用findstr来防止子字符串问题吗?例如:dir /b /s /a-d | findstr /vi ".ext1" | findstr /vi ".ext2" - DapperDan
准确无误的结果 :) 你们太棒了。帮了我很多!谢谢 - DapperDan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接