[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 能否使用7z直接汇总子文件夹后再分卷+加密打包

本帖最后由 5i365 于 2021-12-25 08:58 编辑

情况描述如下:
一个主文件夹 1
其下有两个子文件夹 A  和  B
A文件夹下有 A1, A2, A3 ..... 等N个子文件夹
B文件夹下有 B1, B2, B3 ..... 等N个子文件夹

我想使用7z 把A和B下的所有子文件夹打包成1.zip, 解压密码 123
即: 把 A1, A2, A3, B1, B2, B3....  打包成1.zip
另外, 如果打包成一个zip文件, 就太大了, 所以打包时按每卷 1023m 来打包
找到下面一个批处理, 它是一个文件夹一个包, 没有将所有子文件夹汇总的参数和压缩时分卷的参数,求高手指点, 感谢!

@echo off
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /ad') do (
    "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -p123
)

找到了分卷参数 -v1023m

TOP

本帖最后由 5i365 于 2021-12-25 18:59 编辑

回复 3# idwma


上面A和B是已知的文件夹名,
如果在不知道1文件夹下一级子文件夹数量和名字的情况下, 怎么处理? 我是把批处理放到桌面上的, 桌面上有文件夹1 ,里面有子文件夹A, B, C, D.......

那就得这么长了, 怎样生成这么长的命令?

"C:\Program Files\7-Zip\7z.exe" a ab.7z .\1\A\* .\1\B\* .\1\C\* .\1\D\*    ........

TOP

回复 5# idwma


    文件夹名中还有空格的情况,

TOP

本帖最后由 5i365 于 2021-12-31 08:10 编辑

回复 7# idwma


    你好, 刚刚测试了一下, 发现两个小问题:
1. 因为目标软件只能执行一行批处理命令, 所以我用&把所有cmd命令并在一行当中, 可以执行,但是和不并之前, 压缩的结果完全不同, 把批处理文件和当前文件夹下的文件夹打包了
@echo off&setlocal enabledelayedexpansion & for /f "delims=" %%i in ('dir /b /ad') do set "a=!a! ".\%%i\*"" & "C:\Program Files\7-Zip\7z.exe" a ab.7z %a% -p123 -v10m

2. 批处理中的压缩文件名是ab.7z  怎样用一级文件夹的名字做压缩文件名?
例如:
批处理7z.bat所在的文件夹下,
有A B C ... 多个1级文件夹,
A文件夹中,有A1  A2  A3 .... 多个二级文件夹
同样:
B文件夹中,有B1  B2  B3 .... 多个二级文件夹
......
批处理双击后,
将A文件夹下的所有二级文件夹打包到A.7z中 打包参数 -p123 -v10m
将B文件夹下的所有二级文件夹打包到B.7z中 打包参数 -p123 -v10m
......
当我打开A.7z压缩包后, 直接能看到的是 A1 A2 A3文件夹, 而不是A文件夹 ,其它压缩文件也一样

TOP

回复 9# idwma


    多谢, 问题1不好解决, 是个难题

TOP

本帖最后由 5i365 于 2022-1-2 19:35 编辑

回复 9# idwma


    现在有个现实的问题, 如果我设了 -1023m 分卷大小, 但是文件压缩后的大小没有超过1023, 压缩包的文件名还会是 abc.7z.001

如何加上条件判断, 包大小超1024m时, 才像上面名字似的分卷打包, 不超时压缩文件名就是abc.7z

另外, 当文件夹内为空时,也会打包成一个空包, 怎样也加个判断,空时不再打包? 感觉上面的判断有点困难, 因为怎样能获得压缩后的大小?

TOP

回复 13# idwma


    无法执行, 一闪就关了

TOP

回复 15# idwma


    可以了, 还是会有空包, 但是空zip包不是0k 是1k

TOP

回复 17# idwma


    是个办法, 好像实际大小是32k

TOP

回复 17# idwma


    好像不是for语句,用&都没有问题, 但是只要for语句, 并成一行, 不做处理一定有问题, 大侠能试试把这个搞成一行吗? 试了好多次, 无果

TOP

回复 20# idwma


    真是不错, 结果是对的, 但是在执行过程中, 有些错误的提示
--------------------------------------------------------------------------

C:\Users\Administrator\Desktop\A>cmd /c "@echo off&for /f "delims=" %i in ('dir /b /ad') do ("C:\Program Files\7-Zip\7z.
exe" a "%i.7z" ".\%i\*" -p123 -v1023m& for /f "tokens=3" %j in ('dir /-c "%i.7z.001"') do (if %j lss 200 (del "%i.7z.001
") else if %j lss 1073741824 (ren "%i.7z.001" "%i.7z")))"

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
1 folder, 3 files, 20150760 bytes (20 MiB)

Creating archive: 1 中.7z

Add new data to archive: 1 folder, 3 files, 20150760 bytes (20 MiB)


Files read from disk: 3
Archive size: 20071613 bytes (20 MiB)
Everything is Ok
系统找不到指定的文件。

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
0 files, 0 bytes

Creating archive: 101 日.7z

Add new data to archive: 0 files, 0 bytes


Files read from disk: 0
Archive size: 32 bytes (1 KiB)
Everything is Ok
找不到 C:\Users\Administrator\Desktop\A\101 日.7z.001

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
0 files, 0 bytes

Creating archive: 102 本.7z

Add new data to archive: 0 files, 0 bytes


Files read from disk: 0
Archive size: 32 bytes (1 KiB)
Everything is Ok
找不到 C:\Users\Administrator\Desktop\A\102 本.7z.001

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
1 folder, 3 files, 17433560 bytes (17 MiB)

Creating archive: 11 美.7z

Add new data to archive: 1 folder, 3 files, 17433560 bytes (17 MiB)


Files read from disk: 3
Archive size: 17247534 bytes (17 MiB)
Everything is Ok
系统找不到指定的文件。

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
1 folder, 3 files, 17028438 bytes (17 MiB)

Creating archive: 12 国.7z

Add new data to archive: 1 folder, 3 files, 17028438 bytes (17 MiB)


Files read from disk: 3
Archive size: 16872190 bytes (17 MiB)
Everything is Ok
系统找不到指定的文件。

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
1 folder, 3 files, 26099604 bytes (25 MiB)

Creating archive: 2 国.7z

Add new data to archive: 1 folder, 3 files, 26099604 bytes (25 MiB)


Files read from disk: 3
Archive size: 24190034 bytes (24 MiB)
Everything is Ok
系统找不到指定的文件。

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
0 files, 0 bytes

Creating archive: 202 人.7z

Add new data to archive: 0 files, 0 bytes


Files read from disk: 0
Archive size: 32 bytes (1 KiB)
Everything is Ok
找不到 C:\Users\Administrator\Desktop\A\202 人.7z.001

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
0 files, 0 bytes

Creating archive: 22 人.7z

Add new data to archive: 0 files, 0 bytes


Files read from disk: 0
Archive size: 32 bytes (1 KiB)
Everything is Ok
找不到 C:\Users\Administrator\Desktop\A\22 人.7z.001

C:\Users\Administrator\Desktop\A>pause
请按任意键继续. . .

TOP

本帖最后由 5i365 于 2022-1-3 19:00 编辑

回复 20# idwma

新开了一个贴, 期待很久了:
http://www.bathome.net/viewthread.php?tid=61208&extra=

TOP

回复 20# idwma


    看下面这个贴子的最后部分, 他说用cmd /c , 是不是说, 所有的多行批处理命令,中间用&合并后,然后在两边加上"号, 前面加上cmd /c 难道就可以了???
https://superuser.com/questions/ ... windows-commandline

TOP

回复 20# idwma


   我把上面的改成下面 只处理批处理所在的 0号文件夹,里面文件打包后205M, 但是 把  lss 200 即使改为20 还是会被删除, 没有任何压缩包留下, 哪里出了问题?

cmd /c ""C:\Program Files\7-Zip\7z.exe" a "0号.7z" "0号\*" -p123 -v1023m & if "0号.7z.001" lss 200 (del "0号.7z.001") else if "0号.7z.001" lss 1073741824 (ren "0号.7z.001" "0号.7z")"

TOP

返回列表