You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:25:43