Board logo

标题: [文本处理] 【已解决】批处理对子文件夹分别压缩 [打印本页]

作者: 304802301    时间: 4 天前 20:24     标题: 【已解决】批处理对子文件夹分别压缩

本帖最后由 304802301 于 2024-12-24 11:27 编辑

论坛的大神们:
我有个需求;举个例子。比如我指定一个路径A,A路径下有3个文件夹【B、C、D】,2个文件【1.txt,2.txt】,需要批处理对这3个文件夹和2个文件进行winrar压缩,需要分卷,1000M,批处理完成后把压缩包生成到指定的路径下(我可以自行设置)
感谢
作者: aloha20200628    时间: 4 天前 22:06

本帖最后由 aloha20200628 于 2024-12-22 22:12 编辑

回复 1# 304802301

以下批处代码中假定压缩包存储位置是 c:\tmp\abc.7z,被压缩文件所在目录是 c:\A,解压密码是 pwd@7z,均可自定义... 代码中采用的 7z.exe 可从本论坛直接下载即用 http://bcn.bathome.net/s/tool/index.html?key=7z
  1. @echo off &cd /d "c:\A"
  2. 7z.exe a "c:\tmp\abc.7z" ".\B" ".\C" ".\D" ".\1.txt" ".\2.txt" -p"pwd@7z" -v1000M
  3. pause&exit/b
复制代码

作者: 304802301    时间: 4 天前 22:26

回复 2# aloha20200628


    大神,您好!
文件夹B\C\D,以及1.txt,2.txt是我举得例子中的文件,实际情况是文件夹名字、文件名字是不可预先知道的。只有文件夹A,是我可以自定义的
作者: aloha20200628    时间: 4 天前 22:35

回复 3# 304802301
是要压缩 路径A 下的全部文件夹和文件还是其中的一部分?

作者: 304802301    时间: 3 天前 13:08

回复 4# aloha20200628


    全部文件夹和文件,另外不需要密码哈
作者: aloha20200628    时间: 3 天前 14:01

回复 5# 304802301
  1. @echo off &cd /d "c:\A"
  2. 7z.exe a "c:\tmp\abc.7z" -v1000M
  3. pause&exit/b
复制代码

作者: 304802301    时间: 3 天前 14:23

回复 6# aloha20200628


    能不能再帮忙优化下,生成的压缩包文件可以存放到我指定的路径下
感谢感谢
作者: aloha20200628    时间: 3 天前 14:38

回复 7# 304802301

直接修改6楼代码第二行中的 "c:\tmp\abc.7z" 为你所需...

作者: 304802301    时间: 3 天前 21:20

本帖最后由 304802301 于 2024-12-23 22:29 编辑

回复 8# aloha20200628


  大神,我刚才使用了一下,感觉和我的实际想要的效果不太一样,可能我没说明清楚,我再详细补充下例子:(例子中的文件名字[1.txt,2.txt]、文件夹名字[B、C、D]是已经确定的,已经知道的,但是实际中所有的文件名、所有的文件夹名字是未知的,是不是要使用遍历、轮询等语句,然后最好是使用winrar,1000M分卷)
例子中的文件上传到网盘了,您可以参考下
压缩需求例子1.rar 链接: https://pan.baidu.com/s/1AtUfR4PJCvmxYNZ5RbhASw 提取码: cwvx

例子:
A路径下有3个文件夹【B、C、D】,2个文件【1.txt,2.txt】,具体文件如下:
指定路径1:Z:\A
指定路径2:Z:\A\处理后
Z:\A\B\f202412220329.txt
Z:\A\B\f202412230255.txt
Z:\A\C\texk12号.pdf
Z:\A\D\2021年汇总.pdf
Z:\A\D\2022年汇总.pdf
Z:\A\D\2023年汇总.pdf
Z:\A\1.txt
Z:\A\2.txt

批处理压缩后:
Z:\A-处理后\B.rar【压缩包内包含f202412220329.txt和f202412230255.txt】
Z:\A-处理后\C.rar【压缩包内包含texk12号.pdf】
Z:\A-处理后\D.rar【压缩包内包含2021年汇总.pdf,2022年汇总.pdf,2023年汇总.pdf】
Z:\A-处理后\1.rar【压缩包内包含1.txt】
Z:\A-处理后\2.rar【压缩包内包含2.txt】

作者: aloha20200628    时间: 3 天前 23:14

本帖最后由 aloha20200628 于 2024-12-23 23:15 编辑

回复 9# 304802301
  1. @echo off &set "p=z:\a-处理后"
  2. for %%a in (
  3.    "z:\a;1.txt", "z:\a;2.txt"
  4. ) do for /f "tokens=1* delims=;" %%x in (%%a) do (cd /d "%%x" &7z a "%p%\%%~ny.rar" %%y)
  5. for %%a in (
  6.    "z:\a\b;f202412220329.txt f202412230255.txt",
  7.    "z:\a\c;texk12号.pdf",
  8.    "z:\a\d;2021年汇总.pdf 2022年汇总.pdf 2023年汇总.pdf"
  9. ) do for /f "tokens=1* delims=;" %%x in (%%a) do (cd /d "%%x" &7z a "%p%\%%~nx.rar" %%y)
  10. pause&exit/b
复制代码

作者: 304802301    时间: 前天 02:27

本帖最后由 304802301 于 2024-12-24 02:56 编辑

回复 10# aloha20200628


不行哦,提示System ERROR:尚未实现。
看你代码的逻辑,好像是识别到我列出的文件(或文件夹)后再对这些文件(或文件夹)压缩?我的意思是A路径下不管有多少文件(或文件夹),需要对每一个文件(或文件夹)都逐一的进行压缩,压缩包名字就是文件名(或文件夹名)。只考虑A文件夹里面的第一层路径,不考虑子文件夹。
比如A文件夹里面有2个文件,3个文件夹,压缩后就是5个压缩包,不管3个文件夹里还有多少个文件夹。
还有上楼提供的代码里好像只有1个路径A-处理后,还缺一个处理前的A路径的定义
set "p=Z:\A-处理后"
for /f "tokens=1* delims=;" %%x  do (cd /d "%%x" &7z a "%p%\%%~ny.rar" %%y)


上面是我自己瞎调整的,执行后一闪而过。。。
作者: aloha20200628    时间: 前天 10:46

本帖最后由 aloha20200628 于 2024-12-24 14:51 编辑

回复 11# 304802301

看来语言沟通也是另一种 ‘游戏’,好吧,继续...
  1. @echo off &set "p1=Z:\A" &set "p2=Z:\A-处理后"
  2. cd /d "%p1%" &for %%F in (*) do 7z a "%p2%\%%~nF.rar" "%%F"
  3. for /d %%D in (*) do cd /d "%p1%\%%D" &7z a "%p2%\%%~nxD.rar"
  4. cd /d "%p2%" &pause&exit/b
复制代码

作者: 304802301    时间: 前天 11:12

回复 12# aloha20200628


    我试了下,没有压缩。然后结合ai里的压缩语句,7z a后面加上-tzip就可以了。
感谢感谢,实在太感谢了
作者: aloha20200628    时间: 前天 12:16

回复 13# 304802301

对于压缩类型,7z并没有 .rar 选项,如果选择压缩包文件扩展名是 .rar 且不指定压缩类型参数,则被7z默认是用 zip 压缩类型,尽管压缩包文件扩展名还是 .rar,同理若选择压缩类型参数 -tzip,即便设定压缩包文件扩展名是 .rar 其压缩结果仍是 zip 类型的压缩包文件...

作者: 304802301    时间: 前天 14:13

回复 14# aloha20200628


    再麻烦请教下,我有个文件夹名字是A-apache-tomcat-7.0.109_64_AAA20241224,用这个批处理压缩后是A-apache-tomcat-7.0.rar,缺少后面的.109_64_AAA20241224,是不是代码中输出的压缩包名字是%%~nD.rar引起的?我自己研究了下,改成%%D.rar就可以了,我这样改可以吗
作者: aloha20200628    时间: 前天 14:43

本帖最后由 aloha20200628 于 2024-12-24 15:12 编辑

回复 15# 304802301

采用 for /d %%D ... 句式中的 %%D 因无路径故与 %%~nxD 等效,但采用 for /r /d %%D ... 句式中的 %%D 就会包含全路径,故通用之策还是采用 %%~nxD.rar,据此更新了12楼代码...

作者: 77七    时间: 前天 15:28

本帖最后由 77七 于 2024-12-24 15:34 编辑
  1. @echo off
  2. set infolder=d:\a
  3. set outfolder=d:\b
  4. path C:\Program Files\WinRAR;%path%
  5. for /f "delims=" %%i in ('dir /b "%infolder%\*"') do (
  6. if exist "%infolder%\%%i\" (
  7. rar a -v1g "%outfolder%\%%~nxi" -ep1 -m0 "%infolder%\%%i"
  8. ) else (
  9. rar a -v1g "%outfolder%\%%~ni" -ep1 -m0 "%infolder%\%%i"
  10. )
  11. )
  12. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2