2014-03-05 85 views
0

我有一個腳本可以複製幾個PDF文件,並將它放到相應的文件夾中。腳本副本多* .pdf

腳本:

pushd "\\share\folder\" 
for %%p in (*.pdf) do for /f "tokens=1 delims=_" %%n in ("%%~np") do (
    copy "%%~fp" "\\share2\folder\%%~n\%%~nxp" 
) 

但是,被命名爲喜歡這一點,也將文件複製:Test.pdf2098或hello.pdf20j93f2

我只是希望它複製* .pdf文件,而不是PDF的是無效。

+0

組U = %%〜FP 如果%U:〜-4%== 「.PDF」(複製「%%〜fp」「\\ share2 \ folder \ %%〜n \ %%〜nxp」) 給這個擺動。 – Rich

回答

1

添加的,如果檢查,以驗證擴展

pushd "\\share\folder\" 
for %%p in (*.pdf) do if /i ".pdf"=="%%~xp" for /f "tokens=1 delims=_" %%n in ("%%~np") do (
    copy "%%~fp" "\\share2\folder\%%~n\%%~nxp" 
) 
1

大衛Ruhmann提供了一個解決辦法,但沒有解釋爲什麼你的代碼失敗。

問題是不符合舊8.3短文件命名標準的NTFS捲上的文件會自動分配符合標準的備用短文件名。像xxx.pdf2098這樣的文件將被給予一個擴展名爲.pdf的短名稱。

像COPY,MOVE,FOR等Windows搜索文件名的命令都試圖匹配長名和短名,從而導致您的問題。

可能(通常建議)禁用NTSF捲上的短文件名生成,但任何現有的短名稱將保留並可能仍然會導致問題。

因此,David Ruhmann建議您驗證每個文件的文件擴展名是否正確。

另一種常用的方法來驗證擴展是管DIR/B到FINDSTR:

for /f "eol=: delims=" %%p in (
    'dir /a-d /b *.pdf^|findstr /lie ".pdf"' 
) do for /f "tokens=1 delims=_" %%n in ("%%~np") do (
    copy "%%~fp" "\\share2\folder\%%~n\%%~nxp" 
) 
+0

+1很好的解釋 –