
标题: [文件操作] 提取加密的7z压缩文件中指定扩展名的文件到指定目录 [打印本页]
作者: 小白龙 时间: 4 天前 17:39 标题: 提取加密的7z压缩文件中指定扩展名的文件到指定目录
我有一个加密的7z压缩文件, 例如下面的文件路径, 密码是文件名的前6位,
我想把压缩文件中:
1.扩展名为txt的文件(该类型的文件只有一个)提取到桌面, 文件名改为a.txt
2.扩展名为doc的文件(该类型的文件只有一个)提取到桌面, 文件名改为b.doc
C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z
作者: 小白龙 时间: 4 天前 21:05
这个问题让ai解答, 完全不知道在干什么
作者: aloha20200628 时间: 4 天前 21:39
回复 1# 小白龙
- @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
- md "#$" &pushd "#$" 2>nul &for %%F in ("%_7zF%") do set "nF=%%~nF"
- 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
- 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")
- popd &rd /s/q "#$" &pause&exit/b
复制代码
作者: 小白龙 时间: 4 天前 21:50
回复 3# aloha20200628
如果不解压到临时文件夹, 直接不能定位所需的文件并提取吗?
作者: aloha20200628 时间: 4 天前 22:45
本帖最后由 aloha20200628 于 2025-2-19 22:49 编辑
回复 4# 小白龙
用临时目录以便隔离当前目录中已有的同名文件,不用亦可但可能会覆盖当前目录中的同名文件...
假设当前目录中没有同名文件可用以下代码- @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
- for %%F in ("%_7zF%") do set "nF=%%~nF"
- 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
- 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")
- pause&exit/b
复制代码
作者: 小白龙 时间: 3 天前 06:16
回复 5# aloha20200628
多谢大佬, 我的意思是下面这个命令在提取时, 直接用相同的文件名提取到桌面上, 这可能吗?
例如包内各有一个txt文件和doc文件, 把这两个文件用相同的文件名, 例如xx,提取到桌面上, 这样桌面上就有了xx.txt和xx.doc
7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y
作者: aloha20200628 时间: 3 天前 09:08
回复 6# 小白龙
- @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
- for %%F in ("%_7zF%") do set "nF=%%~nF"
- 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y -o"%userprofile%\desktop"
- pause&exit/b
复制代码
作者: 小白龙 时间: 3 天前 09:54
回复 7# aloha20200628
解压到的文件名要是xx
作者: aloha20200628 时间: 3 天前 10:42
本帖最后由 aloha20200628 于 2025-2-20 11:28 编辑
回复 8# 小白龙
这一版总算到家了吧
...- @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
- for %%F in ("%_7zF%") do set "nF=%%~nF"
- 7za e "%_7zF%" *.txt *.doc -p"%nF:~0,6%" -r -y -o"%userprofile%\desktop">nul
- for /f "tokens=6 delims= " %%F in (
- '7za l "%_7zF%"^|findstr /ir "\.txt$ \.doc$" ') do (ren "%userprofile%\desktop\%%~nxF" "xx%%~xF")
- pause&exit/b
复制代码
作者: aloha20200628 时间: 前天 11:30
本帖最后由 aloha20200628 于 2025-2-21 11:40 编辑
回复 8# 小白龙
用 7za 的参数 -so (解压数据流直给标准管道)可助楼主的最终要求 ‘直线’ 解压更名到桌面,不必追加外部更名的操作了...- @echo off &set "_7zF=C:\Users\Administrator\Desktop\ab.cdefg_25.05.03.7z"
- for %%F in ("%_7zF%") do set "nF=%%~nF"
- for /f "tokens=6 delims= " %%F in (
- '7za l "%_7zF%"^|findstr /ir "\.txt$ \.doc$" '
- ) do 7za e "%_7zF%" "%%F" -p"%nF:~0,6%" -y -so>"%userprofile%\desktop\xx%%~xF"
- pause&exit/b
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |