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

[文件操作] 求助批处理批量将7z压缩包转换为zip压缩包

  1. @echo on
  2. setlocal enabledelayedexpansion
  3. :pw
  4. echo. 读取文本密码
  5. for /f "delims=" %%x in ('TYPE pw.txt')do (
  6. set pw=%%x
  7. )
  8. :chpw
  9. echo. 7z转换zip
  10. path "%ProgramFiles%\7-Zip";%path%
  11. for /f "delims=" %%i in ('dir /b /s /a-d *.7z') do (
  12.     7z x "%%i" -o"%~dp0~Tmp" -r -y -aos -p!pw!
  13.     7z a "%%~dpni.zip" "%~dp0~Tmp\*" -y -sdel
  14. )
  15. rd ~Tmp /s /q
复制代码
如果压缩包无密码 转换正常,有密码则转换失败??求解...

回复 2# fzp070


    我测试 单个密码只传递一次没问题 多个密码貌似就没法正常转换了

TOP

回复 6# fzp070
晚上测试发现一个问题,,当我需转换的压缩包一多的时候,会出现zip包里 好几个其它包的文件都有的现象

TOP

回复 4# flashercs
转换zip包还是会出现大部分空文件zip包,没找到原因

TOP

本帖最后由 holley 于 2022-8-18 10:29 编辑

回复 6# fzp070
现在改成这样,基本效果已经有了
  1. @echo off
  2. mkdir "%~dp0已转换的包"
  3. echo. 读取文本密码
  4. for /f "delims=" %%x in ('TYPE pw.txt')do (set pw=%%x &call :chpw)
  5. exit
  6. :chpw
  7. setlocal enabledelayedexpansion
  8. echo. 7z转换zip
  9. path "%ProgramFiles%\7-Zip";%path%
  10. for /f "delims=" %%i in ('dir /b /a-d *.7z *.rar') do (
  11.     7z x "%%i" -o"%~dp0~Tmp" -r -y -aos -p!pw! &&7z a "%%~dpni.zip" "%~dp0~Tmp\*" -y -sdel
  12. set zf=%%i
  13. rd ~Tmp /s /q
  14. )
  15. REM ping 127.1 -w 1000 -n 6 >nul
  16. move "!zf!" "%cd%\已转换的包\"
  17. goto :pass
  18. :pass
  19. rd ~Tmp /s /q >nul 2>nul
  20. (for /f "delims=" %%a in ('dir /b /a-d *.7z *.rar') do set zf2=%%a)>nul 2>nul
  21. if "%zf2%"=="" goto ok
  22. goto :eof
  23. :ok
  24. echo 【7z转换zip已完成】
  25. rd ~Tmp /s /q
  26. REM pause
  27. exit
复制代码
现在的问题:1、本来没密码的7z、rar压缩包没自动转换;2、数字密码的压缩包也没自动转换;求解??
改成set zf="%%i"后 所有压缩包都转换成功了,但转移路径又没生效- -

TOP

回复 11# fzp070

附上我的最新测试情况及所用pw.txt,昨天试了半天
临时演示 https://jam.lanzouy.com/b0413ygti 密码:8888

TOP

回复 11# fzp070
  1. @echo off
  2. mkdir "%~dp0已转换的7z"
  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文件,请检查密码的正确性,以及密码是否含""引号 &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') do (set zf=%%i
  17. 7z x "!zf!" -p!pw! -o"%~dp0~Tmp" -aoa &&7z a "%%~dpni.zip" "%~dp0~Tmp\*" -y -sdel
  18. rd ~Tmp /s /q >nul 2>nul
  19. )
  20. if not "!zf!"=="" goto pass
  21. goto :eof
  22. :pass
  23. move "!zf!" "%cd%\已转换的7z\"
  24. rd ~Tmp /s /q >nul 2>nul
  25. (for /f "delims=" %%a in ('dir /b /a-d *.7z *.rar') do set zf2=%%a)>nul 2>nul
  26. if "%zf2%"=="" goto ok
  27. goto :eof
  28. :ok
  29. cls
  30. setlocal disabledelayedexpansion
  31. color b1
  32. echo.&echo.&echo 【7z转换zip已全部完成】&echo.&echo.
  33. TIMEOUT /T 3 /NOBREAK
  34. exit
复制代码
将你11#21行的goto pass换到循环外if not "!zf!"=="" goto pass ,目前压缩包转移全部生效了,但压缩包转换格式 10个测试包还是有2个未生效- -,pw.txt无特殊字符,相关测试文件都在12楼。

TOP

回复 14# fzp070


    多谢帮助!测试这几个包正常了。我扩大范围试试效果,,,这两天头昏眼花,水平有限,分析不清楚问题原因。

TOP

回复 14# fzp070


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

TOP

回复 19# fzp070


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

TOP

返回列表