如何在没有额外单词的情况下获取特定文件列表?

时间:2017-07-27 03:06:51

标签: batch-file

文件夹中有一些文件,一些文件名规则如[name]_[date].doc(例如aaa_20170727.doc),它也有一些文件规则,如[name]_[date]_org.doc(例如{{1} }})。

如果我使用aaa_20170727_org.doc,则会输出dir *.doc /BO:N[name]_[date].doc文件列表。

问题:

  1. 如何才能获得[name]_[date]_org.doc
  2. 等文件名规则
  3. 是否可以使用for for循环?

2 个答案:

答案 0 :(得分:0)

dir没有 ex 功能的功能。所以你必须这样做"外部":

dir /b /o:n *.doc|find /i /v "_org.doc"

(注意:dir无法连接交换机,例如findstrdir /bo:n无效,请使用dir /b /o:n

答案 1 :(得分:0)

鉴于名称部分本身不包含下划线_,并且总是有一个有效的日期部分,您可以使用它(尽管这可能仍会匹配某些带有额外单词的项目):

dir /B /A:-D /O:N "*_????????.doc"

如果日期部分也可能丢失,或者名称部分也可能包含下划线,您可以使用findstr过滤掉错误的匹配,如下所示:

dir /B /A:-D /O:N "*_????????.doc" | findstr /I "_[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].doc$"

关于for循环:我想你想通过for循环迭代生成的文件;如果是这样,您实际上需要for /F loop(请注意转义的管道^|):

for /F "delims= eol=|" %%F in ('
    dir /B /A:-D /O:N "*_????????.doc" ^| findstr /I "_[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].doc$"
') do (
    rem // Do something with each file:
    echo/%%F
)