admin管理员组

文章数量:1632155

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, 还有7zipziptargzip等都是支持的,可以自由发挥。

03 后记

没有编译环境的,可以下这个试试。
提取码: 8id5
当然了,土豪直通车。
—END—

本文标签: 文件简易版powershellRAR