2016-12-15 22 views
1

我在嘗試將具有特定掩碼的所有文件複製到另一個目錄時遇到文件選擇問題。如何在執行DIR或FOR批處理命令時忽略8.3名稱

我想出的代碼是:

FOR %%g IN (mylocation\T113*) DO (
copy %%g otherlocation\T113Files\ 
) 

文件被命名爲喜歡T11300A1_xxxxx沒有擴展名。在同一目錄中還有其他的文件以及:

T11200A1_xxxxx 
T14000A1_xxxxx 

當Windows生成的短名,我發現它的行爲:

從Windows 2000開始,如果至少有4個文件或文件夾在短名稱中已經存在相同的前6個字符,剝離的LFN被截斷爲基本名稱的前2個字母(或1,如果基名只有1個字母),後接4個十六進制數字,從未公開的散列文件名,後面跟一個波浪號,後跟一個數字,後跟一個句點. ,然後是擴展名的前3個字符。

會發生什麼事是,我的所有文件的短名稱因此T1hash,有時T14000A1_xxxxx文件可以有一個簡短的名字T113xx~1因爲散列部分即1357,然後它被轉移時,它不應該。

有沒有辦法告訴for循環忽略8.3名稱,只看長名?

+2

'copy'採用通配符,爲什麼要使用'for'循環來複制文件? – Tomalak

回答

1

如果您真的堅持使用FOR命令,那麼讓我們將其更改爲FOR/F,然後將結果傳遞給FINDSTR,以便您可以真正匹配正確的文件名。完整的文件名應該通過管道傳遞,因此它只能匹配完整的文件名。

@echo off 
pushd mylocation 
for /f "eol=: delims=" %%F in ('dir /b /a-d T113* ^|findstr /I /B "T113"') do (
    copy %%F otherlocation\T113Files\ 
) 
popd 
+1

我會將'/ I'開關添加到'findstr'中,以便不區分大小寫地處理文件名,因爲Windows也可以自行處理... – aschipfl

相關問題