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

[文本处理] [已解决] 用7z解密压缩文件,密码有特殊字符”,无法解密码。

本帖最后由 fzp070 于 2022-8-14 12:22 编辑

问题描述:
1、最近做了个右键调用7z命令行程序,读取密码文档,对压缩程序解密的批处理程序。
2、经过测试,大部分密码都能正常解密,包括带(^&%等特殊字符的密码,都没问题,但唯独密码中有"这个就不行了

比如密码是2234^可以, 2234”就不行,试了加双引号包起来也不行。不过 2234”这种密码的压缩包可以用7Z界面程序解压缩。
7z.exe x C:\1\A4.7z -p2234" -oC:\1\ -aoa -bse0 -bsp2>out.txt
7z.exe x C:\1\A4.7z -p"2234"" -oC:\1\ -aoa -bse0 -bsp2>out.txt

在论坛搜了下,发现有两个帖子也遇到同样问题,见下
http://www.bathome.net/viewthread.php?tid=57539&highlight=7z
http://www.bathome.net/viewthread.php?tid=56425&highlight=7z

如下链接4楼,据管理员 Batcher 说是7z的命令行模式不支持双引号"作为密码的一部分
http://bbs.bathome.net/redirect. ... 1349&ptid=56425

因为以上两个帖子是2020年8月、2021年1月的,距现在1年半了, 想问问是不是有方法可以解决此问题了?
另外如果还是无法解决,那有没有可以替代的,因为我只用7z,其它压缩软件不太了解,Winrar、Bandizip、NanaZip等等有命令行工具吗?能命令行解任意字符密码吗?感谢!

看看偶用的7Z是不是假的
建立文档:
  1. S>7z a xx.7z a.txt -p"aaa"bbb"ccc
  2. 7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
  3. Scanning
  4. Updating archive xx.7z
  5. Compressing  a.txt
  6. Everything is Ok
复制代码
解压文档
  1. b>7z e xx.7z -p"aaa"bbb"ccc
  2. 7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
  3. Processing archive: xx.7z
  4. Extracting  a.txt
  5. Everything is Ok
  6. Size:       98
  7. Compressed: 221
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

呃,我这不行啊,我的7z版本是22.01,难道要4.65版本的?我去找找看能不能下载到
  1. C:\1>7z e xx.7z -p"aaa"bbb"ccc
  2. 7-Zip 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15
  3. Scanning the drive for archives:
  4. 1 file, 237 bytes (1 KiB)
  5. Extracting archive: xx.7z
  6. ERROR: xx.7z
  7. Cannot open encrypted archive. Wrong password?
  8. Can't open as archive: 1
  9. Files: 0
  10. Size:       0
  11. Compressed: 0
  12. C:\1>
复制代码

TOP

说一下新的尝试:
1、今天已经试过Winrar的命令行了,好像只支持rar格式,这肯定不行,需要解压各种类型,所以排除了。

2、然后试了Bandizip,这个的命令行,与7z很相似,而且一样存在 英标双引号 无法解压缩的问题。

3、另外还发现了一个新问题,无论7z还是Bandizip,遇到压缩包名称含有^时,要么解压不了,要么提示找不到压缩包。不过这点没关系,我可以提前改名,主要是密码我无法控制,有些密码就是有双引号",所以还是想看有什么方法解决。

上面2楼的方法在我这不行,可能是7z版本的差异吧,我等下去下载一个试试,感谢2楼(@xczxczxcz)!

TOP

回复 2# xczxczxcz


    2楼方法已试,7z 4.65也已找了,实际是不行的。
必须是用这个加密的,才能解密,本质上用这个加密时,双引号是丢失了的,密码直接变成了aaabbbccc,所以不行啊

TOP

回复 5# fzp070

刚才那方法确实把双引号吃了, 掉到7Z的坑里了, 不过不要紧偶等用另一种转义方法,本来不想再写BAT的,今天?
先用 ^转义"号,再用 \(/)转义即可,  即:/^"(或\^",这是转义了一个双引号,不会被吃掉);  /^""/^"=";用一对双引号来包裹一个双引号。

====另少看 CSDN 上的文章。能不看则不看。纯属垃圾。
  1. mkdir b
  2. 7z a x.7z a.txt -paa/^""/^"dd
  3. copy /y x.7z b\
  4. cd b
  5. echo 解压文件
  6. 7z e x.7z -paa/^""/^"dd
  7. pause
复制代码
:: 你再试试, 偶测了下,木有问题。

.
1

评分人数

    • fzp070: 非常感谢!技术 + 1
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

这么多年了,总共加起来用7Z的时间不足半小时,就加了一个7z.exe的环境变量,一直在那睡觉。一般用RAR打开文件看下,更多的是用ZIP,直接用POWERSHELL操作,另外设密码感觉就是为难自己。用一张大硬盘把有用的资料备份后不连机。电脑及文件不设任何密码。一些小的或临时的文件写个FTP上传路由器临时保存。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 6# xczxczxcz

感谢解答!
不是我想设密码,是网上下载内容经常有密码,而解压要输密码麻烦,所以想右键直接调取本地文件里的密码,直接给解压了。

网上下载的文件压缩格式很多样,7z、zip、rar等都有,winrar命令行工具 只支持他自家的rar格式,zip应该不支持rar、7z等解压吧。

通过斜杠、^、双重双引号转义来确保 双引号”字符的不被吃,这个方法可能就只适于单一明确密码了。

通过变量读取文本内的N多个密码,是没法这样精准添加转义了。除非手动提前一个改好。

哎,看来不好弄,我又试了下NanaZip,发现他的命令行 操作与7z非常类似,不过也遇到这个问题,不过他参数好像多些,再继续研究下

感谢的@xczxczxcz 耐心解答,谢谢!

TOP

回复 8# fzp070
先读取密码文件将带"的密码文本转义一遍,再调用可行?
1

评分人数

    • fzp070: 感谢提供思路!技术 + 1

TOP

回复 9# holley

感谢解答!
1、先读取密码文件将带"的密码文本转义一遍,再调用可行?---应该可行的,我再研究下

2、目前我就是在调用解密过程中,加了个识别密码字符串中是否带双引号",如果有”就转为密码手动输入模式,如果没有双引号就命令自动输入,现在双引号的密码还不太多,所以勉强也行。但还是做不到无人值守、程序自动运行完全程。

3、如果能边解密、边识别双引号的密码字符串、并自动转义,这个方法应该很不错,待我研究下。感谢9楼@holley 提供思路。

其实要是压缩工具,原生支持"双引号",就更好了,我都研究了好几种压缩软件,全部都有这类问题。Winrar的命令行工具 还只支持rar一种格式。无语!

TOP

  1. echo  2234"|7z.exe x C:\1\A4.7z -oC:\1\ -aoa -bse0 -bsp2>out.txt
复制代码
1

评分人数

    • fzp070: 非常感谢,很有用,帮助很大!技术 + 1

TOP

回复 4# fzp070


WinRAR有两个命令行工具:rar.exe和winrar.exe
前者不支持zip文件,后者支持zip文件。
1

评分人数

    • fzp070: 感谢管理老大的热情帮助!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# idwma


    感谢解答,等下我试试先!

TOP

回复 12# Batcher


    感谢解答!
之前用的Rar.exe,等下我再试试winrar.exe。
非常感谢大家的帮助!

TOP

回复 11# idwma


此方法已试,对”双引号"确实可以!

很奇特,7z都没有 -p参数,此时会弹出输入密码状态,此方法将echo 内容通过|直接转给7z,7z刚好在密码输入界面,就自动接收echo输出内容,并下一步,从而实现了密码输入并解压。没想到这么用,论坛能人多,感谢!

不过也有新问题了,具体是我在尝试各种特殊字符密码验证的时候,目前发现含^的密码会出错,原因是echo 内容如果有^会直接消失。不清楚还有没有其它字符会消失。
具体验证一个密码20'`."“48"^"2"^",通过观察发现直接echo会将两个^丢失,应该是这导致解压不成功。两加双引号可以不丢^但echo也会多输出两个"给7z
  1. @echo off
  2. FOR /F "delims=" %%i in ('echo 20'`."“48"^"2"^"') do (
  3.     echo %%i
  4. )
  5. echo 20'`."“48"^"2"^"
  6. echo "20'`."“48"^"2"^""
  7. echo 隔1
  8. set "a=20'`."“48"^"2"^""
  9. echo %a%
  10. echo "%a%"
  11. echo 隔2
  12. echo %a%%
  13. echo ^%a%
  14. echo 隔3
  15. echo %%a%%^
  16. echo 隔4
  17. echo 隔5
  18. echo 隔6^
  19. echo end
  20. echo %a% |7z.exe x raddr.7z -oC:\1\ -aoa -bse0 -bsp2
复制代码
  1. 20'`."“48""2""
  2. 20'`."“48""2"^"
  3. "20'`."“48"^"2"^""
  4. 隔1
  5. 20'`."“48""2"^"
  6. "20'`."“48"^"2"^""
  7. 隔2
  8. 20'`."“48""2"^"
  9. 20'`."“48""2"^"
  10. 隔3
  11. %a%echo 隔4
  12. 隔5
  13. 隔6echo end
  14. 7-Zip 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15
  15. Scanning the drive for archives:
  16. 1 file, 237 bytes (1 KiB)
  17. Extracting archive: raddr.7z
  18. Enter password (will not be echoed):
  19. Can't open as archive: 1
  20. Files: 0
  21. Size:       0
  22. Compressed: 0
  23. 请按任意键继续. . .
复制代码

TOP

返回列表