2013-03-22 184 views
5

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

对于exampel:列出文件夹,如果它在C:\temp,如果它在C:\temp\random_folder_name但不是没有,如果它在C:\temp\done

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

短篇小说,排除所有文件夹命名为“完成”和它们的内容。

回答

7

上你几乎没有任何名称中删除\temp部分。

Findstr工具/ V返回所有行,不包含在很多案件的串

DIR /广告将只显示目录(Atrribut =目录)

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

啊 - 但是这样会排除名为'done *'的目录和文件,而不仅仅是''done'' – Magoo 2013-03-22 11:09:19

+0

/ad消除了文件名 - 我的错误。尽管如此,如果在'\ done'之后没有'\',这也会匹配'\ doneeverything'。 OTOH,使用'\ done \'将只豁免'done'目录,例如'c:\ are \ all \ done \ here'但是不会消除像'c:\ are \ not \ all \ done'。要做到这一点,你必须添加额外的'| findstr/i/e/v“\ done”'。 – Magoo 2013-03-22 11:45:42

+0

排除文件夹名称(仅使用文件名)dir/a-d。 (请参阅dir /?) – Stephan 2013-03-22 12:27:54

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

应符合该法案

  • ,或者如果你想省略已经“完成”的目录路径
+0

是 - /我是一个不错的主意! – Stephan 2013-03-22 11:07:54

+1

如果“完成”文件夹位于特定路径中,它会完成完美的工作。我希望它排除任何名为“done”的文件夹,无论在哪里,在这种情况下都是C:\ Temp,它是。 对不起,如果我不清楚这一点。 – Tomas 2013-03-22 11:10:01

0

dir /b /s /aa <path> 

会做的伎俩。/b表示较少的详细输出,/ s表示递归(子目录),/ a表示仅用于存档的文件。这通常是正常创建的文件的情况 - 它默认为打开!

相关问题