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

[文件操作] 提取加密的7z压缩文件中指定扩展名的文件到指定目录

[复制链接]
发表于 2025-2-19 17:39:51 | 显示全部楼层 |阅读模式
我有一个加密的7z压缩文件, 例如下面的文件路径, 密码是文件名的前6位,
我想把压缩文件中:
1.扩展名为txt的文件(该类型的文件只有一个)提取到桌面, 文件名改为a.txt
2.扩展名为doc的文件(该类型的文件只有一个)提取到桌面, 文件名改为b.doc

C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z
 楼主| 发表于 2025-2-19 21:05:32 | 显示全部楼层
这个问题让ai解答, 完全不知道在干什么
发表于 2025-2-19 21:39:57 | 显示全部楼层
回复 1# 小白龙

  1. @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
  2. md "#$" &pushd "#$" 2>nul &for %%F in ("%_7zF%") do set "nF=%%~nF"
  3. 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
  4. for %%F in (*.txt *.doc) do if /i "%%~xF"==".txt" (move /y "%%F" "%userprofile%\desktop\a.txt") else (move /y "%%F" "%userprofile%\desktop\b.doc")
  5. popd &rd /s/q "#$" &pause&exit/b
复制代码
 楼主| 发表于 2025-2-19 21:50:21 | 显示全部楼层
回复 3# aloha20200628

如果不解压到临时文件夹, 直接不能定位所需的文件并提取吗?
发表于 2025-2-19 22:45:29 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-19 22:49 编辑

回复 4# 小白龙

用临时目录以便隔离当前目录中已有的同名文件,不用亦可但可能会覆盖当前目录中的同名文件...
假设当前目录中没有同名文件可用以下代码

  1. @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
  2. for %%F in ("%_7zF%") do set "nF=%%~nF"
  3. 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
  4. for /f "tokens=6 delims= " %%F in ('7za l "%_7zF%"^|findstr /ir "\.txt$ \.doc$" ') do if /i "%%~xF"==".txt" (move /y "%%F" "%userprofile%\desktop\a.txt") else (move /y "%%F" "%userprofile%\desktop\b.doc")
  5. pause&exit/b
复制代码
 楼主| 发表于 2025-2-20 06:16:18 | 显示全部楼层
回复 5# aloha20200628


    多谢大佬, 我的意思是下面这个命令在提取时, 直接用相同的文件名提取到桌面上, 这可能吗?
例如包内各有一个txt文件和doc文件, 把这两个文件用相同的文件名, 例如xx,提取到桌面上, 这样桌面上就有了xx.txt和xx.doc

7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
发表于 2025-2-20 09:08:34 | 显示全部楼层
回复 6# 小白龙

  1. @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
  2. for %%F in ("%_7zF%") do set "nF=%%~nF"
  3. 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y -o"%userprofile%\desktop"
  4. pause&exit/b
复制代码
 楼主| 发表于 2025-2-20 09:54:09 | 显示全部楼层
回复 7# aloha20200628


    解压到的文件名要是xx
发表于 2025-2-20 10:42:17 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-20 11:28 编辑

回复 8# 小白龙

这一版总算到家了吧 ...

  1. @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
  2. for %%F in ("%_7zF%") do set "nF=%%~nF"
  3. 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y -o"%userprofile%\desktop">nul
  4. for /f "tokens=6 delims= " %%F in (
  5.   '7za l "%_7zF%"^|findstr /ir "\.txt$ \.doc$" ') do (ren "%userprofile%\desktop\%%~nxF" "xx%%~xF")
  6. pause&exit/b
复制代码
发表于 2025-2-21 11:30:30 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-2-21 11:40 编辑

回复 8# 小白龙

用 7za 的参数 -so (解压数据流直给标准管道)可助楼主的最终要求 ‘直线’ 解压更名到桌面,不必追加外部更名的操作了...

  1. @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
  2. for %%F in ("%_7zF%") do set "nF=%%~nF"
  3. for /f "tokens=6 delims= " %%F in (
  4.   '7za l "%_7zF%"^|findstr /ir "\.txt$ \.doc$" '
  5. ) do 7za e "%_7zF%" "%%F" -p"%nF:~0,6%" -y -so>"%userprofile%\desktop\xx%%~xF"
  6. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 13:22 , Processed in 0.021127 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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