我想从计算机中找出所有 PDF 文件并将它们放入一个文件夹中。
到目前为止,我有这个:
mkdir d:\test
chcp 65001
d:
FOR /f "tokens=*" %%a in ('dir /s /b *.pdf') DO copy "%%a" d:\test\
c:
FOR /f "tokens=*" %%a in ('dir /s /b *.pdf') DO copy "%%a" d:\test\
f:
FOR /f "tokens=*" %%a in ('dir /s /b *.pdf') DO copy "%%a" d:\test\
由于某种原因,它不会复制所有内容。在 D: 中,它复制了 2400 个文件中的 2126 个,在 F: 中,它复制了 284 个文件中的 274 个。
知道为什么某些 PDF 文件无法复制吗?我该如何修复它?
答案1
您可以计算文件数量并检查是否有重复:
md d:\test 2>nul
set /a count=0
set /a dupli=0
for /r "d:\" %%i in (*.pdf) do (
if not exist "d:\test\%%~nxi" (
copy "%%~fi" "d:\test\%%~nxi"
set /a count+=1
) else set /a dupli+=1
)
echo %count% files copied, %dupli% not (duplicate files).
将目标文件夹放在其他驱动器中以避免复制到其自身。
答案2
由于没有太多细节,我的第一猜测是文件名重复。在 acript 中复制不会提示覆盖,并且会跳过该文件。
答案3
我怀疑发生这种情况是因为您在执行 FOR 命令时不在正确的文件夹中。
执行
D:
只会更改驱动器,而不会更改目录。如果 D 驱动器的上次使用目录是D:\Example
,则命令会带您到那里。
有三种方法可以解决此问题:
执行
D: CD \
在 FOR 命令之前。
执行
CD /D D:\
在 FOR 命令之前。
在 FOR 命令本身中指定驱动器和目录:
FOR /F "tokens=*" %%A in ('DIR /S /B D:\*.pdf') DO COPY "%%A" D:\test\