01 前言
为啥要写这个,因为可能有些特殊的环境无法使用RAR的解压软件,因而动手找了一个库然后写了这个脚本,希望有帮助。
02 正文
- 准备:第三方的dll——SharpCompress,可以Down下自行编译。
脚本如下:
<#
解压rar文件 V1
by hokis
2019-11-28测试环境;win10,powershell 5.1
SharpCompress.dll 版本为 dotnet 4.5
#>#rar文件路径
$file = 'D:\test\test.rar'$path = (Get-Location).Path#dll路径
$dll = $($path)+'\SharpCompress.dll'if((-not $file) -or (-not (Test-Path -Path $file))){Write-Host ($file+' 不存在!')exit
}
if(-not (Test-Path -Path $dll)){Write-Host ($dll+' 文件不存在!')exit
}#加载
[void][System.Reflection.Assembly]::LoadFile($dll)$sip = [System.IO.Path]
$sif = [System.IO.File]
if([SharpCompress.Archives.Rar.RarArchive]::IsRarFile($file)){$tempFolder = $sip::Combine($sip::GetDirectoryName($file),$sip::GetFileNameWithoutExtension($file))if(-not (Test-Path $tempFolder)){mkdir $tempFolder | Out-Null}try{$reader = [SharpCompress.Readers.Rar.RarReader]::Open($sif::OpenRead($file))Write-Host ('正在解压...')while($reader.MoveToNextEntry()){if(-not $reader.Entry.IsDirectory){$fn = $sip::GetFileName($reader.Entry.Key)$folder = $sip::GetDirectoryName($reader.Entry.key)$dest = $sip::Combine($tempFolder,$folder)if(-not (Test-Path $dest)){mkdir $dest | Out-Null}$reader.WriteEntryTo($sif::OpenWrite($sip::Combine($dest,$fn)))}}$reader.Dispose()Write-Host ('解压完成!请查看文件夹【'+$tempFolder+'】')}catch{Write-Host ('异常:'+$Error[0].Exception.Message)}#定位文件夹#&explorer.exe /select,$tempFolder
}else{Write-Host ($file+'不是一个合法的rar文件!')
}
以上为powershell版本,使用方法不再赘述。
当然了,为了方便使用,也提供一个CMD版。
@echo off
cd /d %~dp0
powershell.exe -command "$file='%1';$path=(Get-Location).Path;$dll=$($path)+'\SharpCompress.dll';if((-not $file) -or (-not (Test-Path -Path $file))){Write-Host ($file+' 不存在!');exit;};if(-not (Test-Path -Path $dll)){Write-Host ($dll+' 文件不存在!');exit};[void][System.Reflection.Assembly]::LoadFile($dll);$sip=[System.IO.Path];$sif=[System.IO.File];if([SharpCompress.Archives.Rar.RarArchive]::IsRarFile($file)){$tempFolder=$sip::Combine($sip::GetDirectoryName($file),$sip::GetFileNameWithoutExtension($file));if(-not (Test-Path $tempFolder)){mkdir $tempFolder|Out-Null;};try{$reader=[SharpCompress.Readers.Rar.RarReader]::Open($sif::OpenRead($file));Write-Host ('正在解压...');while($reader.MoveToNextEntry()){if(-not $reader.Entry.IsDirectory){$fn=$sip::GetFileName($reader.Entry.Key);$folder=$sip::GetDirectoryName($reader.Entry.key);$dest=$sip::Combine($tempFolder,$folder);if(-not (Test-Path $dest)){mkdir $dest|Out-Null;};$reader.WriteEntryTo($sif::OpenWrite($sip::Combine($dest,$fn)));}};$reader.Dispose();Write-Host ('解压完成!请查看文件夹【'+$tempFolder+'】');}catch{Write-Host ('异常:'+$Error[0].Exception.Message);}}else{Write-Host ($file+'不是一个合法的rar文件!');}"
pause
使用说明:
- 将上述CMD命令另存为
.bat
文件,如:解压rar.bat
- 将
SharpCompress.dll
与上一步的文件解压rar.bat
放在同一个目录下- 将待解压的RAR文件拖放到
解压rar.bat
上松手即可
这个库,不仅支持rar
, 还有7zip
、zip
、tar
、gzip
等都是支持的,可以自由发挥。
03 后记
没有编译环境的,可以下这个试试。
提取码: 8id5
当然了,土豪直通车。
—END—