将具有特定扩展名的文件复制到文件夹中

将具有特定扩展名的文件复制到文件夹中

我想从计算机中找出所有 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\
    

相关内容