【问题标题】:Batch single liner for finding files with directory wildcard用于查找带有目录通配符的文件的批处理单行
【发布时间】:2016-01-04 12:46:12
【问题描述】:

考虑以下目录结构

- Temp\
- Temp\DirA\
- Temp\DirA\Content\
- Temp\DirA\Content\file.txt
- Temp\DirB\
- Temp\DirB\Content\
- Temp\DirB\Content\file.txt

现在我想在一行语句中列出内容目录中的所有文本文件。我希望这样的事情能够奏效:

dir Temp\*\Content\*.txt

但它没有(它给出了一个语法错误)。即使 forfiles 返回一个空结果。有没有方便的方法来实现这一点?

请注意:我的真实世界命令将包含多个通配符。我不想将 foreach 目录与 foreach 文件结合起来。

【问题讨论】:

    标签: batch-file wildcard


    【解决方案1】:

    使用递归dir /s 并通过\Content\ 过滤输出:

    dir /s /b Temp\*.txt Temp\*.log | find "\Content\"
    

    如果您不需要列出 Content\other_folder\ 中的文件,请使用正则表达式:

    dir /s /b Temp\*.txt Temp\*.log | findstr /r "\\Content\\[^\\]*$"
    

    【讨论】:

    • 嗯,不是我所希望的,但它应该让我开始。我想我会安装perl。如果我没记错的话,这应该可以解决问题:perl -e 'foreach (<c:/temp/*/content/*.txt>) { print; print "\n" }'
    • @SchlaWiener,而不是 forfiles,您可以在给定命令的输出的 for /f 解析循环中执行所有操作,如果您有很多文件。可能也更具可读性。
    • 好吧,在 unix 中,我可以简单地使用查找工具 `find /etc/*/*.conf -type f`,我认为可能会直接替代 windows。无论如何,使用 perl 我可以获得相同的结果(或者只是为 windows 安装 unix 工具)
    • 是的,在这种情况下,安装 unix 工具是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2018-04-22
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多