2014-03-05 34 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很好的解释 –