[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

我有一个加密的7z压缩文件, 例如下面的文件路径, 密码是文件名的前6位,
我想把压缩文件中:
1.扩展名为txt的文件(该类型的文件只有一个)提取到桌面, 文件名改为a.txt
2.扩展名为doc的文件(该类型的文件只有一个)提取到桌面, 文件名改为b.doc

C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z

这个问题让ai解答, 完全不知道在干什么

TOP

回复 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
复制代码

TOP

回复 3# aloha20200628

如果不解压到临时文件夹, 直接不能定位所需的文件并提取吗?

TOP

本帖最后由 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
复制代码

TOP

回复 5# aloha20200628


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

7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y

TOP

回复 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
复制代码

TOP

回复 7# aloha20200628


    解压到的文件名要是xx

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

返回列表