bat自动保存论文到制定目录
写个bat,把"C:\Users\Lenovo\Downloads"下的所有pdf存入文件夹:D:\PDF论文 下面,如果已有的话就不用存了,并对D:\PDF论文 里面的pdf去重
下面这段 .bat
脚本满足你的要求:
- 递归遍历
C:\Users\Lenovo\Downloads
下所有 PDF,统一复制到D:\PDF论文
(同名已存在就跳过)。 - 对
D:\PDF论文
内部进行内容级去重(按 MD5 哈希,保留首个、删除后续重复)。
把下面内容保存为例如 collect_pdf.bat
,双击运行即可。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
chcp 65001 >nulrem === 路径设置 ===
set "SRC=C:\Users\Lenovo\Downloads"
set "DEST=D:\PDF论文"rem === 创建目标文件夹(若不存在) ===
if not exist "%DEST%" mkdir "%DEST%"echo [1/2] 复制 PDF(同名已存在则跳过)...
for /r "%SRC%" %%F in (*.pdf) do (if not exist "%DEST%\%%~nxF" (copy /Y "%%~fF" "%DEST%\" >nul) else (echo 已存在: %%~nxF,跳过)
)echo [2/2] 去重(按内容 MD5)...
set "HASHLIST=%DEST%\_hashes.tmp"
if exist "%HASHLIST%" del /q "%HASHLIST%"for %%F in ("%DEST%\*.pdf") do (set "hash="for /f "tokens=* delims=" %%H in ('certutil -hashfile "%%~fF" MD5 ^| findstr /R /I "^[0-9A-F][0-9A-F]*$"') do set "hash=%%H"if not defined hash (echo 无法计算哈希,跳过: %%~nxF) else (rem 在已见哈希列表中查找;未找到则记录,找到则删除为重复findstr /I /X "!hash!" "%HASHLIST%" >nul 2>&1if errorlevel 1 (echo !hash!>>"%HASHLIST%") else (echo 发现重复,删除: %%~nxFdel /q "%%~fF"))
)if exist "%HASHLIST%" del /q "%HASHLIST%"
echo 完成。
endlocal
exit /b
说明与小贴士
- 去重按“文件内容”判断(MD5),不是按文件名;同名不同内容会保留先复制/先出现的那个。
certutil
是 Windows 自带,无需安装。- 如果命令行显示中文乱码,可把
chcp 65001
这一行删掉,或确保以 UTF-8(带 BOM)保存脚本。