如何在Calibre命令行批量压缩epub图片并指定输出目录?
批量压缩EPUB图片并输出到指定目录的解决办法
你的错误命令是因为Windows CMD的for循环不支持同时绑定两个目录变量,得换个思路:先获取源文件的路径,把源目录替换成目标目录,创建对应的子文件夹后,再将压缩后的文件输出过去。
直接在CMD窗口执行的命令
set "source=C:\Users\foldername" set "dest=C:\Users\newfoldername" for /r "%source%" %v in (*.epub) do ( set "file_path=%~dpv" set "file_name=%~nxv" setlocal enabledelayedexpansion set "target_dir=!file_path:%source%=%dest%!" if not exist "!target_dir!" mkdir "!target_dir!" calibre-debug -r "Editor Chains" "Compress Images" "%v" "!target_dir!!file_name!" endlocal )
保存成批处理文件执行的版本
如果想双击运行,把下面内容存成compress_epub.bat文件(注意批处理里变量要写%%,和直接在CMD窗口执行的%区别开):
@echo off set "source=C:\Users\foldername" set "dest=C:\Users\newfoldername" for /r "%source%" %%v in (*.epub) do ( set "file_path=%%~dpv" set "file_name=%%~nxv" setlocal enabledelayedexpansion set "target_dir=!file_path:%source%=%dest%!" if not exist "!target_dir!" mkdir "!target_dir!" calibre-debug -r "Editor Chains" "Compress Images" "%%v" "!target_dir!!file_name!" endlocal ) echo 所有文件压缩完成! pause
关键部分说明
source和dest:分别替换成你的源EPUB文件夹路径和压缩后文件的目标保存路径for /r:递归扫描源文件夹下所有EPUB文件,包括子文件夹里的内容%~dpv:获取当前EPUB文件所在的完整文件夹路径%~nxv:获取当前EPUB文件的完整文件名(比如this is a book.epub)target_dir:把源文件夹路径替换为目标文件夹路径,保证压缩后的文件和原文件保持相同的子目录结构mkdir:如果目标子文件夹不存在,自动创建该目录- 最后一行
calibre-debug:调用Calibre插件执行图片压缩,直接输出到目标路径的原文件名,不会重复添加.epub后缀
内容的提问来源于stack exchange,提问作者medukia
相关产品推荐
相关产品推荐

