返回列表 发帖

[文件操作] [已解决]批处理解压目录下所有压缩包

解压 目录下,子文件夹和子子文件夹(和子子子...文件夹)所有压缩包在压缩包原位置,然后删除压缩包,并且压缩包解压出来的所有文件的文件名前 加上压缩包名字(变成:压缩包名字+"@"+文件名)。
      例如:
           操作前文件目录:
            Test/0001/你好.rar(其中包含001.txt,002.jpg和003.mp4)
            Test/0002/世界.rar(其中包含001.txt,002.jpg和003.mp4)
            Test/0003/你好世界/HelloWorld.rar(其中包含001.txt,002.jpg和003.mp4)
           操作后文件目录:
            Test/0001/你好/你好@001.txt
            Test/0001/你好/你好@002.jpg
            Test/0001/你好/你好@003.mp4

            Test/0002/世界/世界@001.txt
            Test/0002/世界/世界@002.jpg
            Test/0002/世界/世界@003.mp4

            Test/0003/你好世界/HelloWorld/HelloWorld@001.txt
            Test/0003/你好世界/HelloWorld/HelloWorld@002.jpg
            Test/0003/你好世界/HelloWorld/HelloWorld@003.mp4

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 设置要搜索的目录
  4. set "rootdir=C:\MyFile\Test"
  5. :: 遍历目录下的所有.rar和.zip文件
  6. for /r "%rootdir%" %%i in (*.rar, *.zip) do (
  7.     :: 获取压缩包的完整路径
  8.     set "fullpath=%%i"
  9.     :: 获取压缩包所在的目录
  10.     set "dir=%%~dpi"
  11.     :: 获取压缩包的文件名(不含扩展名)
  12.     set "filename=%%~ni"
  13.    
  14.     :: 使用7-Zip解压压缩包到原位置
  15.     7z x "!fullpath!" -o"!dir!" -y
  16.    
  17.     :: 创建一个临时目录用于存放解压出来的文件
  18.     md "!dir!!filename!"
  19.    
  20.     :: 遍历解压出来的文件并重命名
  21.     for /r "!dir!" %%f in (*) do (
  22.         if "%%~dpf"=="!dir!!filename!\" (
  23.             set "newname=!filename!@%%~nxf"
  24.             move "%%f" "!dir!!filename!\!newname!"
  25.         )
  26.     )
  27.    
  28.     :: 删除原压缩包
  29.     del "!fullpath!"
  30. )
  31. echo 处理完成。
  32. pause
复制代码
回复 1# gddsssko
我这个执行后压缩包不见了,也没有解压后的文件。

TOP

回复 3# newswan


    失败,变成了所有文件无扩展名,并且前缀加上了目录下第一个压缩包的名称,然后没有一个压缩包是解压成功的

TOP

回复 10# dreamer


    错误:被期望位于"C:\MySoft\WinRAR\WinRAR.exe(WinRAR的路径)"的开头

TOP

回复 9# aloha20200628


    经测试可行,感谢大佬

TOP

回复 8# 77七

经测试可行,感谢大佬,

TOP

返回列表