2017-07-27 22 views
0

文件夹中有一些文件,一些文件名称规则,如[name]_[date].doc(例如:aaa_20170727.doc),它也有一些文件规则,如[name]_[date]_org.doc(例如:aaa_20170727_org.doc)。如何获得没有额外单词的特定文件列表?

如果我使用dir *.doc /BO:N它将输出[name]_[date].doc[name]_[date]_org.doc文件列表。

问:

  1. 如何我只得到文件名规则类似[name]_[date].doc
  2. 是否有可能使用for循环?
+0

有可能使用'for'循环。只有'_org.doc',你可以做'_ *。doc'。 – SteveFest

+0

你在这里 - 我写了一个答案。如果您觉得它有用,请勾选旁边的复选标记,以便未来的访问者知道这可以解决问题。 – SteveFest

回答

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 
) 
0

dir没有功能ex clude东西。所以你必须这样做“外部”:

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

(注:dir不能连接交换机例如像findstrdir /bo:n不起作用,使用dir /b /o:n

+0

非常感谢你。 我很抱歉有一些词遗漏,我更新了问题。 – Peggy

相关问题