
标题: [文件操作] 用7za.exe解压最底层的文件夹中的所有文件 [打印本页]
作者: 小白龙 时间: 2025-2-12 21:09 标题: 用7za.exe解压最底层的文件夹中的所有文件
怎样用7za.exe命令行解压最底层的文件夹中的所有文件, 文件被包裹了好几层文件夹
作者: 77七 时间: 2025-2-12 21:49
压缩包内的最底层文件夹?
作者: Batcher 时间: 2025-2-12 22:07
回复 1# 小白龙
请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
否则大家帮你写的代码也许可以处理假设的需求,但是无法处理你真实的需求。
作者: wanghan519 时间: 2025-2-13 06:04
确实需要具体说明
猜着写了一个- 7za l -slt "a a.7z" | awk '/^Path =/{a=substr($0,8)}/^Attributes = A/{split(a,b,"\\");c=length(b);if(d<c)d=c;e[c]=e[c]a"\n"}END{printf e[d]}' | xargs -i 7za e "a a.7z" "{}"
复制代码
大概是说,找出目录层数最多的文件,解压出来
没有考虑层数最多的有多个文件夹里面的文件名是否冲突
也不知道windows、linux里分隔符是否不同
也不知道7za l -slt输出的信息里,是Folder = -还是Attributes = A表示文件
很不严谨,仅供参考
作者: aloha20200628 时间: 2025-2-13 10:29
本帖最后由 aloha20200628 于 2025-2-13 14:21 编辑
回复 1# 小白龙
给一个批处版本,用计算路径分隔符的数量来获取最深层目录,代码第一行可自定义压缩包文件路径 "_7zF=c:\test\1.7z",假设 *.7z 压缩包中只有一个最深层目录
7z.exe 可从本坛第三方下载(http://bcn.bathome.net/s/tool/index.html?key=7z)落地即用,与本脚本文件和压缩包文件同目录- @echo off &setlocal enabledelayedexpansion &set "z=0" &set "_7zF=c:\test\1.7z"
- for /f "tokens=5* delims= " %%a in ('7z.exe l "!_7zF!"^|find /i "d..." ') do (
- set "d=%%b" &echo,!d!>#1 &echo,!d:\=!>#2 &for %%v in (#1,#2) do set "%%v=%%~zv"
- set/a "_z=#1-#2" &if !_z! gtr !z! set "z=!_z!" &set "_d=!d!")
- 7z.exe x -y "!_7zF!" "!_d!"
- del /q #1 #2 &pause&exit/b
复制代码
作者: 小白龙 时间: 2025-2-14 11:19
回复 3# Batcher
不好意思,
我的三个文件被包在了多层文件夹中压缩的, 而我想把这三个文件直接解压到某个目录, 例如:桌面
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |