2017-12-18 232 views
2

我正在寻找只将.xls文件移出目录(包括子文件夹)而不移动.xlsx或.xlsm文件,我发现一条命令认为会做这项工作,它工作正常,如果我指定.xlsx,只会拉动通过该扩展名的文件。只移动.xls文件不是.xlsx,.xlsx,.xlsb

但是,当指定.xls时,即使我没有尾随通配符,它​​也会通过.xls,.xlsx,.xlsm和.xlsb。

for /r "c:\source" %x in (*.xls) do move "%x" "c:\destination" 

我没那么熟悉,所以我可能只是失去了一些东西很明显,但已经尝试了搜索,并不能找到任何东西来解决这个问题。

任何帮助,将不胜感激。由于

+1

你可以在这里找到解决方案[dir命令:3和4个字符扩展是一样的吗?(HTTPS: //superuser.com/q/238900/241386) –

回答

1

*.xls模式对阵双方是在用户和存在于默认的背景和意图向后兼容的8.3短文件名中可见的长文件名检查。短文件名只有3个字符的扩展名,因此长文件名为longfilename.xlsx的文件的文件扩展名较短,为.xls

为了克服这个问题,最简单的解决方案是通过findstr建立额外的过滤器:

for /F "delims= eol=|" %x in ('dir /S /A:-D /B "C:\source\*.xls" ^| findstr /I "\.xls$"') do move "%x" "c:\destination" 
+1

更短的替换解决方案: (* .xls)中的%g如果/ I“%〜xg”==“。xls”move“%g”“c :\ destination“ – vitsoft

+0

是的,@ vitsoft,也应该可以工作(在为''重新添加'/ R'选项之后);但我更喜欢预过滤项目,以便'for'循环只迭代所需的项目;在很多物品的情况下,这可能会更好一些。 – aschipfl