标题: [文件操作] [已解决]批处理解压目录下所有压缩包 [打印本页]
作者: gddsssko 时间: 2024-6-8 22:36 标题: [已解决]批处理解压目录下所有压缩包
解压 目录下,子文件夹和子子文件夹(和子子子...文件夹)所有压缩包在压缩包原位置,然后删除压缩包,并且压缩包解压出来的所有文件的文件名前 加上压缩包名字(变成:压缩包名字+"@"+文件名)。
例如:
操作前文件目录:
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
作者: gddsssko 时间: 2024-6-9 08:05
- @echo off
- setlocal enabledelayedexpansion
-
- :: 设置要搜索的目录
- set "rootdir=C:\MyFile\Test"
-
- :: 遍历目录下的所有.rar和.zip文件
- for /r "%rootdir%" %%i in (*.rar, *.zip) do (
- :: 获取压缩包的完整路径
- set "fullpath=%%i"
- :: 获取压缩包所在的目录
- set "dir=%%~dpi"
- :: 获取压缩包的文件名(不含扩展名)
- set "filename=%%~ni"
-
- :: 使用7-Zip解压压缩包到原位置
- 7z x "!fullpath!" -o"!dir!" -y
-
- :: 创建一个临时目录用于存放解压出来的文件
- md "!dir!!filename!"
-
- :: 遍历解压出来的文件并重命名
- for /r "!dir!" %%f in (*) do (
- if "%%~dpf"=="!dir!!filename!\" (
- set "newname=!filename!@%%~nxf"
- move "%%f" "!dir!!filename!\!newname!"
- )
- )
-
- :: 删除原压缩包
- del "!fullpath!"
- )
-
- echo 处理完成。
- pause
复制代码
回复 1# gddsssko
我这个执行后压缩包不见了,也没有解压后的文件。
作者: newswan 时间: 2024-6-9 09:37
- @echo off
- setlocal enabledelayedexpansion
-
- rem 设置工作目录
- set "work=%temp%\%random%%random%%random%%random%"
- mkdir "%work%" || goto :eof
-
- rem 递归查找所有压缩包并解压
- for /r %%A in (*.zip *.rar) do (
- "%ProgramFiles%\7-Zip\7z.exe" x -o"%%~dpA" "%%A"
- rem 获取压缩包文件名(不带扩展名)
- set "zipname=%%~nA"
- rem 处理解压出的文件
- for %%F in ("%%~dpA*") do (
- rem 重命名解压出的文件
- set "newname=%%~nF"
- ren "%%F" "!zipname!@!newname!"
- )
- )
-
- rem 删除临时工作目录
- rmdir "%work%" /s /q
复制代码
作者: gddsssko 时间: 2024-6-9 09:50
回复 3# newswan
失败,变成了所有文件无扩展名,并且前缀加上了目录下第一个压缩包的名称,然后没有一个压缩包是解压成功的
作者: newswan 时间: 2024-6-9 11:26
本帖最后由 newswan 于 2024-6-9 13:40 编辑
是 ai 写的。。。。
重新写了下- @echo off
-
- set "_folder_=D:\xyz\"
-
- pushd "%_folder_%"
-
- for /f "usebackq tokens=* delims=" %%a in (` dir /s /b /a-d *.zip *.rar `) do (
- "C:\Program Files\WinRAR\Rar.exe" x "%%a" "%%~dpa\%%~na\"
- rem del "%%a"
- for %%b in ("%%~dpa\%%~na\*") do (
- ren "%%~fb" "%%~na@%%~nxb"
- )
- )
-
- popd
复制代码
作者: newswan 时间: 2024-6-9 11:42
本帖最后由 newswan 于 2024-6-9 13:33 编辑
powershell 简单些
for 语法 头疼了- $folder = "D:\xyz\"
-
- Push-Location -Path $folder
-
- Get-ChildItem -Path "*.rar","*.zip" -Recurse | ForEach-Object {
- Write-Host "--$_.FullName--"
- Push-Location -Path $_.DirectoryName
- Start-Process -Wait -FilePath "C:\Program Files\WinRAR\Rar.exe" -ArgumentList " x `"$($_.FullName)`" `"$($_.BaseName)\`""
- Remove-Item -Path $_.FullName
- $ff = $_.BaseName
- Get-ChildItem -Path $ff | ForEach-Object {
- Rename-Item -Path $_.Fullname -NewName ( $ff + "@" + $_.BaseName + $_.Extension )
- }
- Pop-Location
- }
复制代码
作者: newswan 时间: 2024-6-9 11:44
很少用7z,7z 应该也差不多
作者: 77七 时间: 2024-6-9 11:50
- @echo off
- set "_rar=C:\Program Files\WinRAR\Rar.exe"
-
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /s /a-d *.rar *.zip') do (
- md "%%~dpni"
- "%_rar%" e "%%i" "%%~dpni" && del "%%i"
- for /f "delims=" %%j in ('dir /b "%%~dpni\*"') do (
- ren "%%~dpni\%%j" "%%~ni@%%j"
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-6-9 12:05
本帖最后由 aloha20200628 于 2024-6-9 12:17 编辑
回复 1# gddsssko
假设7z.exe可在命令行直接调用运行(路径已被预设)...
7z解压过程中可自动生成被指定的解压目录;代码第5行现状是保留源压缩包文件,抹去前缀REM即可删除源压缩包文件
- @echo off
- for /f "delims=" %%F in ('dir /b/s/a-d *.zip *.rar *.7z') do (
- 7z.exe x "%%F" -o"%%~dpnF" -y
- for /f "delims=" %%a in (' dir /b/s/a-d "%%~dpnF" ') do ren "%%a" "%%~nF@%%~na%%~xa"
- REM del /q "%%F"
- )
- pause&exit/b
复制代码
作者: dreamer 时间: 2024-6-9 15:09
看看是否適用,如沒問題可將echo 去除後測試使用.- @Echo off
- Set rar="C:\Program Files\WinRAR\WinRAR.exe"
- For /r %%i in (*.rar) do Echo "%rar%" rn "%%~i" *.*" %%~ni@*.*
- For /r %%i in (.) do Echo "%rar%" e "%%~dpi*.rar" "%%~dpi*.*"&&Echo del "%%~dpi*.rar"
- pause
复制代码
作者: gddsssko 时间: 2024-6-9 16:53
回复 10# dreamer
错误:被期望位于"C:\MySoft\WinRAR\WinRAR.exe(WinRAR的路径)"的开头
作者: gddsssko 时间: 2024-6-9 16:57
回复 9# aloha20200628
经测试可行,感谢大佬
作者: gddsssko 时间: 2024-6-9 16:58
回复 8# 77七
经测试可行,感谢大佬,
作者: dreamer 时间: 2024-6-10 08:12
回复 11# gddsssko
我測試結果也是如此,但壓縮檔內的檔名確實也會被更改(winrar會,rar不會),不知是不是winrar的bug如果用直接輸入的不管是winrar或rar命令都能完成更名也不會出現錯誤.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |