找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 9345|回复: 5

[文件操作] 用7za.exe解压最底层的文件夹中的所有文件

[复制链接]
发表于 2025-2-12 21:09:08 | 显示全部楼层 |阅读模式
怎样用7za.exe命令行解压最底层的文件夹中的所有文件, 文件被包裹了好几层文件夹
发表于 2025-2-12 21:49:19 | 显示全部楼层
压缩包内的最底层文件夹?
发表于 2025-2-12 22:07:59 | 显示全部楼层
回复 1# 小白龙


请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
否则大家帮你写的代码也许可以处理假设的需求,但是无法处理你真实的需求。
发表于 2025-2-13 06:04:52 | 显示全部楼层
确实需要具体说明
猜着写了一个
  1. 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表示文件
很不严谨,仅供参考

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 感谢分享

查看全部评分

发表于 2025-2-13 10:29:00 | 显示全部楼层
本帖最后由 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)落地即用,与本脚本文件和压缩包文件同目录

  1. @echo off &setlocal enabledelayedexpansion &set "z=0" &set "_7zF=c:\test\1.7z"
  2. for /f "tokens=5* delims= " %%a in ('7z.exe l "!_7zF!"^|find /i "d..." ') do (
  3.    set "d=%%b" &echo,!d!>#1 &echo,!d:\=!>#2 &for %%v in (#1,#2) do set "%%v=%%~zv"
  4.    set/a "_z=#1-#2" &if !_z! gtr !z! set "z=!_z!" &set "_d=!d!")
  5. 7z.exe x -y "!_7zF!" "!_d!"
  6. del /q #1 #2 &pause&exit/b
复制代码
 楼主| 发表于 2025-2-14 11:19:46 | 显示全部楼层
回复 3# Batcher


   不好意思,
我的三个文件被包在了多层文件夹中压缩的, 而我想把这三个文件直接解压到某个目录, 例如:桌面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 10:21 , Processed in 0.016027 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表