2017-12-18 138 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