【问题标题】:Batch script to list folders but exclude specific folders列出文件夹但排除特定文件夹的批处理脚本
【发布时间】:2013-03-22 10:53:47
【问题描述】:

我希望此脚本列出文件夹名称中包含“已删除”的所有文件夹,但如果它们位于名为“完成”的文件夹中,则不列出。

例如:如果文件夹在C:\tempC:\temp\random_folder_name 中,则列出文件夹,但如果在C:\temp\done 中则不列出

dir /s "C:\temp" | findstr "\deleted"

短篇小说,排除所有名为“完成”的文件夹及其内容。

【问题讨论】:

    标签: list batch-file directory dir


    【解决方案1】:

    你快到了。

    Findstr /v 返回所有不包含字符串的行

    dir /ad 将只显示目录 (Atrribut=Directory)

    dir /s /ad "C:\temp" | findstr "\deleted" | findstr /v "\done"
    

    【讨论】:

    • 啊 - 但这也会排除名为 done* 的目录和文件,而不仅仅是 'done'
    • /ad 消除了文件名——我的错误。尽管如此,如果没有` after \done`,这也将匹配\doneeverything。 OTOH,使用\done` will exempt only done` 目录,如c:\were\all\done\here,但不会消除以\done 结尾的目录,如c:\were\not\all\done。为此,您必须添加一个额外的|findstr /i /e /v "\done"
    • 排除文件夹名(仅使用文件名)dir /a-d。 (见目录/?)
    【解决方案2】:
    dir /s "C:\temp" | findstr "\deleted"|findstr /i /v "\temp\done\"
    

    应该符合要求

    • 如果您想省略路径上的目录中包含“done”的任何名称,请删除 \temp 部分

    【讨论】:

    • 如果“完成”文件夹位于该特定路径中,它就可以完美地完成工作。我希望它排除任何名为“done”的文件夹,无论在哪里,在本例中是 C:\Temp。抱歉,如果我不清楚这一点。
    【解决方案3】:

    在很多情况下:

    dir /b /s /aa <path>
    

    会成功的。 /b 用于不太详细的输出,/s 用于递归(子目录),/aa 仅用于准备归档的文件。这通常是正常创建的文件的情况 - 它默认为 on!

    【讨论】:

      最近更新 更多