作者danny0838 (道可道非常道)
看板EZsoft
标题Re: [请益] 如何使用7z来批次压缩档案?
时间Thu Nov 30 23:56:47 2017
: @echo off
: set a=c:\program files\7-zip\7zG.exe
: for %%a in (%*) do (
: dir /a %%a|findstr "DIR" >nul 2>nul && (
: "%a%" a -tzip "%%~dpa%%~na.zip" "%%~a\*"
: ) || (
: "%a%" a -tzip "%%~dpa%%~na.zip" %%a
: )
: )
钩沉一下,这个批次档虽然可用,但某些情况下会有问题,因此我写了改良版:
----------------------------------------------------------------
:: 将多个资料夹或档案拖曳至此批次档,即个别打包为 .cbz
:: 资料夹会将其下的档案打包,档案则直接打包
@echo off
chcp 65001
set "
ZIP=%ProgramFiles%\7-Zip\7z.exe"
set ARGS=%*
setlocal EnableDelayedExpansion
for %%F in (
!ARGS!) do (
endlocal
if
exist "%%~F\" (
"%ZIP%" a -tzip "%%~F.cbz" "%%~F\*" -mx0 -xr!desktop.ini -xr!Thumb.db
) else (
"%ZIP%" a -tzip "%%~F.cbz" "%%~F" -mx0
)
setlocal
)
endlocal
----------------------------------------------------------------
说明:
* 第 4 行加上转换为 UTF-8 编码以避免档名含有非 Big5 字元时的潜在问题。
* 第 5 行 7Z 路径改用 %ProgramFiles% (虽然这路径好像也不太会动到XD)。
* 罗嗦的粉红色那几行是为了避免档名含有 ( ) & ^ 等特殊字元时出错。
注:即使这样改了,
如果档案或资料夹含有 ^ 字元且其绝对路径不含半形空白,
仍会出错。这是 CMD 本身的问题,微软不改版是无法解决的。
* 第 10 行采用比 dir | findstr 更精简且语义更佳的方式判断是否为资料夹。
* 一般是包漫画才会不包入资料夹本身,
因此这里包成 .cbz (本质是 ZIP) 且不压缩的方式。
如有其他种类的需求可自行修改相关参数:
* 改成 7Z 格式:将 11 和 13 行的
-tzip 改成
-t7z,
.cbz 改成
.cb7 或
.7z
* 改变压缩等级:修改 11 和 13 行的
-mx0 (例如最大是
-mx9)
* 和之前一样,在
%AppData%\Microsoft\Windows\SendTo 目录下
为这批次档建立捷径,就能加到右键选单的「传送到」
2017/12/17 UPDATE:
经过某高人指点,发现有更精简的写法,如下:
(功能和 BUG 都和原版一样)
----------------------------------------------------------------
:: 将多个资料夹或档案拖曳至此批次档,即个别打包为 .cbz
:: 资料夹会将其下的档案打包,档案则直接打包
@echo off
chcp 65001
set ZIP="%ProgramFiles%\7-Zip\7z.exe"
:loop
if exist "%~1\" (
%ZIP% a -tzip "%~1.cbz" "%~1\*" -mx0 -xr!desktop.ini -xr!Thumb.db
) else (
%ZIP% a -tzip "%~1.cbz" "%~1" -mx0
)
shift
if not "%~1" == "" goto loop
----------------------------------------------------------------
--
《终结内容农场》浏览器套件
Firefox:
https://mzl.la/2g0I0ry (桌机 & Android 手机)
Chrome:
http://bit.ly/2wDWWyP
真相:
https://i.imgur.com/WTHmuVJ.png
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.30.20
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/EZsoft/M.1512057412.A.30B.html
1F:推 pobynb: 推 12/01 01:41
2F:推 goldie: 大大对 Windows Batch 档好熟喔!@@ 12/01 12:45
3F:→ goldie: 另外也推签名档的《终结内容农场》浏览器套件 12/01 12:46
※ 编辑: danny0838 (36.225.77.116), 12/01/2017 20:02:44
※ 编辑: danny0838 (36.227.229.221), 12/17/2017 11:24:01
4F:推 katy50306: 推 批次档更新成原po的 01/21 13:52