标题: [文本处理] 【已解决】批处理对子文件夹分别压缩 [打印本页]
作者: 304802301 时间: 3 天前 20:24 标题: 【已解决】批处理对子文件夹分别压缩
本帖最后由 304802301 于 2024-12-24 11:27 编辑
论坛的大神们:
我有个需求;举个例子。比如我指定一个路径A,A路径下有3个文件夹【B、C、D】,2个文件【1.txt,2.txt】,需要批处理对这3个文件夹和2个文件进行winrar压缩,需要分卷,1000M,批处理完成后把压缩包生成到指定的路径下(我可以自行设置)
感谢
作者: aloha20200628 时间: 3 天前 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- @echo off &cd /d "c:\A"
- 7z.exe a "c:\tmp\abc.7z" ".\B" ".\C" ".\D" ".\1.txt" ".\2.txt" -p"pwd@7z" -v1000M
- pause&exit/b
复制代码
作者: 304802301 时间: 3 天前 22:26
回复 2# aloha20200628
大神,您好!
文件夹B\C\D,以及1.txt,2.txt是我举得例子中的文件,实际情况是文件夹名字、文件名字是不可预先知道的。只有文件夹A,是我可以自定义的
作者: aloha20200628 时间: 3 天前 22:35
回复 3# 304802301
是要压缩 路径A 下的全部文件夹和文件还是其中的一部分?
作者: 304802301 时间: 前天 13:08
回复 4# aloha20200628
全部文件夹和文件,另外不需要密码哈
作者: aloha20200628 时间: 前天 14:01
回复 5# 304802301 - @echo off &cd /d "c:\A"
- 7z.exe a "c:\tmp\abc.7z" -v1000M
- pause&exit/b
复制代码
作者: 304802301 时间: 前天 14:23
回复 6# aloha20200628
能不能再帮忙优化下,生成的压缩包文件可以存放到我指定的路径下
感谢感谢
作者: aloha20200628 时间: 前天 14:38
回复 7# 304802301
直接修改6楼代码第二行中的 "c:\tmp\abc.7z" 为你所需...
作者: 304802301 时间: 前天 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 时间: 前天 23:14
本帖最后由 aloha20200628 于 2024-12-23 23:15 编辑
回复 9# 304802301 - @echo off &set "p=z:\a-处理后"
- for %%a in (
- "z:\a;1.txt", "z:\a;2.txt"
- ) do for /f "tokens=1* delims=;" %%x in (%%a) do (cd /d "%%x" &7z a "%p%\%%~ny.rar" %%y)
- for %%a in (
- "z:\a\b;f202412220329.txt f202412230255.txt",
- "z:\a\c;texk12号.pdf",
- "z:\a\d;2021年汇总.pdf 2022年汇总.pdf 2023年汇总.pdf"
- ) do for /f "tokens=1* delims=;" %%x in (%%a) do (cd /d "%%x" &7z a "%p%\%%~nx.rar" %%y)
- 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
看来语言沟通也是另一种 ‘游戏’,好吧,继续...- @echo off &set "p1=Z:\A" &set "p2=Z:\A-处理后"
- cd /d "%p1%" &for %%F in (*) do 7z a "%p2%\%%~nF.rar" "%%F"
- for /d %%D in (*) do cd /d "%p1%\%%D" &7z a "%p2%\%%~nxD.rar"
- 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 编辑
- @echo off
- set infolder=d:\a
- set outfolder=d:\b
- path C:\Program Files\WinRAR;%path%
-
- for /f "delims=" %%i in ('dir /b "%infolder%\*"') do (
- if exist "%infolder%\%%i\" (
- rar a -v1g "%outfolder%\%%~nxi" -ep1 -m0 "%infolder%\%%i"
- ) else (
- rar a -v1g "%outfolder%\%%~ni" -ep1 -m0 "%infolder%\%%i"
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |