我有一个复制多个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 :(得分:1)
添加if检查以验证扩展程序
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 :(得分:1)
David Ruhmann提供了一种解决方法,但没有解释您的代码失败的原因。
问题是NTFS卷上不符合旧的8.3短文件命名标准的文件会自动分配符合标准的备用短文件名。像xxx.pdf2098这样的文件将被赋予一个扩展名为.pdf的短名称。
搜索文件名的窗口命令如COPY,MOVE,FOR等都试图匹配长名称和短名称,从而导致您的问题。
可以(并且经常建议)禁用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"
)