PowerShell压缩与解压缩

1、压缩

因为Powershell中没有提供关于压缩的命令,所以需要调用.Net中的对象来完成压缩功能

#-----------------------------------------------------------------
# NAME          : zip
# DESCRIPTION   : 压缩文件
# PARAMETER     : (in)fileDirectory = 待压缩的文件夹路径
#                               : (in)zipDirectory = 生成的压缩文件的路径
# RETURN              : 无
# 備考                      : 调用.Net的压缩类库
#-----------------------------------------------------------------
function zip([String]$fileDirectory, $zipDirectory){
    #加载依赖
    [System.Reflection.Assembly]::Load("WindowsBase,
       Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")

    #最终输出的Zip文件,以时间动态生成。
    $zipPath = $zipDirectory + (Get-Date).ToString('yyyy-MM-dd hh-mm-ss') + ".zip"
    #删除已有的压缩包
    if (Test-Path($ZipPath)){
    	Remove-Item $ZipPath
    }

    #获取文件集合
    $Di=New-Object System.IO.DirectoryInfo($fileDirectory);
    $files = $Di.GetFiles()
    if($files.Count -eq 0){
    	exit
    }

    #打开压缩包
    $pkg=[System.IO.Packaging.ZipPackage]::Open($ZipPath,
       [System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")

    #加入文件到压缩包
    ForEach ($file In $files)
    {
    	$uriString="/" +$file.Name
    	$partName=New-Object System.Uri($file, [System.UriKind]"Relative")
        
    	$pkgPart=$pkg.CreatePart($partName, "application/zip",
    		[System.IO.Packaging.CompressionOption]"Maximum")
        # 注意:待压缩文件内容过大时,使用ReadAllBytes方法,可能会导致内存溢出
        #             请使用其他方式进行文件内容读取
    	$bytes=[System.IO.File]::ReadAllBytes($file.FullName)
    	$stream=$pkgPart.GetStream()
    	$stream.Seek(0, [System.IO.SeekOrigin]"Begin");
    	$stream.Write($bytes, 0, $bytes.Length)
    	$stream.Close()
    }

    #关闭压缩包
    $pkg.Close()
}

2、解压缩

Powershell自带命令

#-----------------------------------------------------------------
# NAME                  : unzip
# DESCRIPTION   : 解压文件
# PARAMETER     : (in)zipFile = 待解压文件的路径
#                               : (in)target = 解压路径
# RETURN              : 无
#-----------------------------------------------------------------
function unzip([String]$zipFile, [String]$target){
    #解压完了是否打开文件夹
    $ShowDestinationFolder = $true
     
    if (!(Test-Path $target)) {
        mkdir $target
    }
     
    $shellApp = New-Object -ComObject Shell.Application
    
    $zipFileFolder = $shellApp.NameSpace($zipFile)
    $targetFolder = $shellApp.NameSpace($target)
    $files = $zipFileFolder.Items()
    
    #重复解压某一个文件,会弹出是否覆盖原文件的提示
    #不弹出提示的解决案 : 在target目录下查找(-f)已被解压的文件,然后删除
    # % : ForEach-Object的别名
    #↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    $files|%{
        if(Test-Path("$target/{0}" -f $_.name)){
            Remove-Item ("$target/{0}" -f  $_.name ) -Force -Recurse
        }
    }
    #↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    
    $targetFolder.CopyHere($files)
     
    if ($ShowDestinationFolder) {
     #打开解压后的文件夹
      explorer.exe $target
    }
}

转载于:https://my.oschina.net/u/2462423/blog/1816466

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows系统提供了多种方式进行压缩操作。其中一种方式是使用Powershell命令行工具进行压缩操作。你可以按照以下步骤来进行操作: 1. 打开Powershell:按下Win键+X,选择Powershell,或者使用Windows搜索功能搜索Powershell并打开(可以选择以管理员权限运行)。 2. 压缩文件:使用Expand-Archive命令进行压缩操作。例如,如果你需要压缩名为test.zip的文件,可以在Powershell中输入以下命令: ``` Expand-Archive test.zip ``` 压缩后的文件将会保存在当前目录下的test文件夹中。如果你想将文件压缩到其他文件夹(例如FolderD),可以使用-DestinationPath参数指定目标路径,如下所示: ``` Expand-Archive test.zip -DestinationPath C:\FolderD ``` 3. 压缩文件:使用Compress-Archive命令进行压缩操作。例如,如果你需要将C:\Utst.pdf和Utst2.pdf这两个文件压缩成一个名为utest.zip的压缩包,并将其保存在C:\test\文件夹中,可以在Powershell中输入以下命令: ``` Compress-Archive -Path C:\Utst.pdf, Utst2.pdf -CompressionLevel Optimal -DestinationPath C:\test\utest.zip ``` 需要注意的是,如果文件路径中存在空格,可以将路径用双引号括起来,以确保命令能够正确执行。例如: ``` cd /d "c:\Program Files" ```<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [windows自带的压缩/压缩(zip/unzip)功能-Powershell 的应用之一](https://blog.csdn.net/m0_60558800/article/details/123759719)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Windows下压tar.gz压缩文件](https://blog.csdn.net/qq_42692386/article/details/109181437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值