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


    是我考虑不周全,如果还有问题,你再回复吧。
密码中不要有""引号,如果有引号的就需要另外的解压方法

TOP

回复 14# fzp070


    请教:突然想到一种情况,如果本身是zip包但有密码,那么就也需要解压后重新打包,直接调用肯定是有问题的,,我是不是可以在“ok”里针对zip再做1次解压+压缩,还是说可以在前面就做什么判断选择?

TOP

本帖最后由 fzp070 于 2022-8-19 16:46 编辑

回复 17# holley

抱歉,看错了,以为你说的是压缩包内有压缩包都需要解压。
如果是说zip的话,你可以解压后再解压,不过这样麻烦,最好的方式就是第一次解压并重新打包时放在其它路径,这样就可以一次全解压了。

    解压是默认解第一层吧,从OK里面再解压也只是解压第一层啊。
压缩包里面的压缩包要解压的话,估计你得先读取解压成功的文件夹,如查到有压缩包,就继续解压,比较复杂了,你可以研究下
或者你研究下7z有没针对,压缩包内的压缩包,一次解压的,不过如果密码也不同,就会很复杂吧

TOP

本帖最后由 fzp070 于 2022-8-19 17:28 编辑

回复 17# holley


    将"%%~dpni.zip" 改成"%cd%\已转换zip\%%~ni.zip",另外for查找范围改成*.7z *.rar *.zip,刚已试OK,你试下
  1. @echo off
  2. mkdir "%~dp0原压缩包"
  3. echo. 读取文本密码
  4. for /f "delims=" %%x in ('TYPE pw.txt')do (set pw=%%x &call :chpw)
  5. cls
  6. ::setlocal disabledelayedexpansion
  7. color c7
  8. echo.&echo.&echo 运行结束,如有剩余【未解压转换zip】的7z与rar文件,请检查密码的正确性,以及密码是否含""引号 &echo.&echo.
  9. rd ~Tmp /s /q >nul 2>nul
  10. TIMEOUT /T 3 /NOBREAK
  11. exit
  12. :chpw
  13. echo. 7z转换zip
  14. path "%ProgramFiles%\7-Zip";%path%
  15. setlocal enabledelayedexpansion
  16. for /f "delims=" %%i in ('dir /b /a-d *.7z *.rar *.zip') do (set zf=%%i
  17. 7z x "!zf!" -p!pw! -o"%~dp0~Tmp" -aoa &&7z a "%cd%\已转换zip\%%~ni.zip" "%~dp0~Tmp\*" -y -sdel &&move "!zf!" "%cd%\原压缩包\"
  18. rd ~Tmp /s /q >nul 2>nul
  19. )
  20. (for /f "delims=" %%a in ('dir /b /a-d *.7z *.rar *.zip') do set zf2=%%a)>nul 2>nul
  21. if "%zf2%"=="" goto ok
  22. goto :eof
  23. :ok
  24. cls
  25. ::setlocal disabledelayedexpansion
  26. color b1
  27. echo.&echo.&echo 【7z转换zip已全部完成】&echo.&echo.
  28. TIMEOUT /T 3 /NOBREAK
  29. exit
复制代码
1

评分人数

TOP

回复 19# fzp070


    我想了一个逻辑:提前将当前所有zip移动到“已转换文件夹”里面,原批处理完成后再对“已转换文件夹”里的所有zip做解压并压缩到上一级目录,这样保证了“已转换文件夹”里面都是源文件,脚本所在都是已转换的无密zip压缩包。
第一步比较简单,第二步写的有点艰难,还在反复测试。

TOP

回复 20# holley


    19楼已改好了,你试试,支持转换有密码zip 为无密码zip

TOP

返回列表