标题: [文件操作] 批量解压压缩文件用的批处理 该怎样补全比较稳健? [打印本页]
作者: wqte45 时间: 2024-9-22 21:08 标题: 批量解压压缩文件用的批处理 该怎样补全比较稳健?
- @echo off
- if "%~1" == "-m" (
- set cmdline="%~2" -o"%~dpn2"
- ) else (
- set cmdline="%~1" -o"%~dp1"
- )
-
- for /f "delims=" %%p in (C:\Windows\System32\pass.txt) do (
- echo.
- echo Trying password: %%p
- 7z x %cmdline% -p%%p -y >nul 2>nul
- if errorlevel 2 (
- echo Password failed.
- ) else (
- echo Password succeeded!
- goto :end
- )
- )
-
- echo. & echo All passwords have been tried, no correct password found.
- :end
- exit /b
复制代码
对批处理不熟悉,只会用一些简单的命令,写这个代码很费劲,大家看看代码怎么样能改进? 代码越少越好,我也比知道上面的代码有啥隐患没有。
不过我发现 for /f "delims=" %%p in (C:\Windows\System32\pass.txt) do 这里的文件路径,我如果用%~dp0pass.txt 发现一个问题:就是如果是在cmd里面 手动输入 命令 ***.bat d:\1.rar 就能正常,但是如果我直接打开1.rar的目录 点击右键 选择解压
(解压已经添加到注册表里 ***.bat “%1” )就发现失败,原因是%~dp0pass.txt 并没有解析为 ***.bat文件自身所在的目录,而是解析成了1.rar的目录 成了d:\pass.txt...真搞不懂 我只能写成绝对路径C:\Windows\System32\pass.txt(批处理也在这个目录里)
才会解析成功,文件右键还是命令行都可以,但是为啥改成%~dp0pass.txt 就容易解析错呢。我的批处理基础太差了, 刚开始写set 那个等号 左右两边居然不能用空格,只能用记事本写,也没有语法检查的功能,每次都出错,检查错误的方式只能去掉echo off 看看代码执行情况。。我觉得你们精通批处理的都很厉害呢
这个批处理 就是批量解压压缩文件用的,因为客户的压缩包,都有不同的密码,密码都十几个,而且我也不知道那个压缩包对应哪个密码,所以就想批量尝试密码文件,效果挺好的,就是代码写的太差了,大家帮我纠正下错误吧 感谢!
作者: 77七 时间: 2024-9-23 14:51
试着写了一个- @echo off
- echo 解压 "%~1"
- choice /t 5 /d y /m "解压到【当前文件夹】 [Y,默认] 或 解压到【%~n1】 [N]"
- if errorlevel 2 (
- set str=-o"%~dpn1"
- )
- for /f "delims=" %%a in ('more +12 "%~f0"') do (
- 7z x "%~1" %str% -p%%a&&exit
- )
- echo 解压失败
- pause
- exit
- 123
- 456
复制代码
d:\1\2.bat
- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.7z\Shell\7z1]
- @="自定义解压"
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.7z\Shell\7z1\Command]
- @="\"D:\\1\\2.bat\" \"%1\""
复制代码
1.reg
屏蔽7z 的错误输出,再判断errorlevel好像有点多此一举...
作者: aloha20200628 时间: 2024-9-23 16:38
本帖最后由 aloha20200628 于 2024-9-23 16:45 编辑
回复 1# wqte45
以下代码仅供参考...
代码简要说明》
假设第一个命令行参数指定压缩包文件,未发现命令行参数则自动退出;
解压文件在压缩包文件所在目录下的一个新建子目录中,其名与压缩包文件同名。
- @echo off &if "%~1"=="" exit/b
- for /f "delims=" %%p in (C:\Windows\System32\pass.txt) do (
- echo,trying to unpack with password: %%p
- 7z x "%~1" -o"%~dpn1" -p"%%p" -y>nul 2>nul
- if errorlevel 2 (echo,unpack faild) else (echo,unpack done! &goto :end)
- )
- echo,no valid password found
- :end
- pause&exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |