PowerShellでzipアーカイブを作成する方法


回答:


124

CodePlexにアクセスしてPowerShell Community Extensionsを取得する場合は、それらのwrite-zipコマンドレットを使用できます。

以来

CodePlexはシャットダウンに備えて読み取り専用モードになっています

PowerShellギャラリーにアクセスできます。


114
うん、それはほとんどの圧縮コマンドレットのコアライブラリとして7zを使用しています。私は、私はそれを実装しbecauesを知っている;)1
X0N

1
笑いい仕事、x0n。PSCXでフィードストアプロバイダーを実装しました。少し実用的ではありませんが、楽しさのトンです。:)
マットハミルトン

1
7zを使用している場合、パスワードを使用して圧縮できますか?
マック

1
@SemiDementedwrite-zip [input file/folder] [output file]
joshschreuder 2014

9
Powershell 5には、.zipを作成するCompress-Archiveコマンドレットが付属しています。blogs.technet.microsoft.com/ heyscriptingguy / 2015/08/13 /…
Benoit Patra

255

PowerShell 3および.NET 4.5(使用できる場合)で動作する純粋なPowerShellの代替:

function ZipFiles( $zipfilename, $sourcedir )
{
   Add-Type -Assembly System.IO.Compression.FileSystem
   $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
   [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
        $zipfilename, $compressionLevel, $false)
}

作成したいzipアーカイブへのフルパスと、zipしたいファイルを含むディレクトリへのフルパスを渡すだけです。


1
これには実際にはPowershell 3.0が必要ですか、それとも.net 4.5だけが必要ですか?実際のpowershell機能は非常に軽く見えますが、単に.netプログラミングであるだけです。
bwerks 2013

@bwerksはここで
noam

大きなファイルを1つだけ圧縮する方法を探していましたが、これを行う方法はないようです。新しいディレクトリを作成し、そこに1つのファイルをコピーし、そのディレクトリを新しいzipファイルに圧縮してから、ディレクトリを削除してクリーンアップするコードを記述する必要がありました。
Baodad 2014

1
@バオダッド、私の答えを見てください。
Dherik、2015

私はフルパスが必要だと読んだはずです。混乱した少年!ところでこれは受け入れられる答えになるはずです
Kolob Canyon

244

PowerShell v5.0ではCompress-ArchiveExpand-Archiveコマンドレットが追加されています。リンクされたページには完全な例がありますが、その要点は次のとおりです。

# Create a zip file with the contents of C:\Stuff\
Compress-Archive -Path C:\Stuff -DestinationPath archive.zip

# Add more files to the zip file
# (Existing files in the zip file with the same name are replaced)
Compress-Archive -Path C:\OtherStuff\*.txt -Update -DestinationPath archive.zip

# Extract the zip file to C:\Destination\
Expand-Archive -Path archive.zip -DestinationPath C:\Destination

11
PowerShell v5.0が正式にリリースされました。Windows 10にも付属しています
Ohad Schneider

id

2
Compress-Archive説明のパラグラフ2から:「... Compress-Archiveを使用して圧縮できる最大ファイルサイズは、現在2 GBです。これは、基盤となるAPIのSystem.IO.Compression.ZipFile制限です」を使用すると、この制限を回避できます。
AMissico

2
2GBの制限はから継承されましたSystem.IO.Compression.ZipFile。使用している.NETフレームワークにこの制限がない場合、CmdLetはこの制限に達しません。コードで確認しました。
TravisEz13 2017年

2
@Pramod -OutputPathパラメータはありません。
BrainSlugs83 2018年

57

最新の.NET 4.5フレームワークによるネイティブな方法ですが、完全に機能はありません。

作成:

Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::CreateFromDirectory("c:\your\directory\to\compress", "yourfile.zip") ;

抽出:

Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::ExtractToDirectory("yourfile.zip", "c:\your\destination") ;

すでに述べたように、完全に機能はないので、 上書きフラグを。

更新:これを長年にわたって拡張している他の開発者については、以下を参照してください...


機能のない方法を使用する理由は何ですか?
プルート

これは、投稿された日付と前例の順序で受け入れられた回答です。あなたの更新されたコメントに関して-今これを行うには本当にたくさんの方法があります。私はこの機能の必要性に直面しており、PowerShell 4を使用しています。最初に見つけたのはネイティブの方法です。これは2009年の良い質問でした。最初に尋ねられたとき、私はまだ質問で提示されたさらなる研究があったかもしれないと思います。
DtechNet

45

7zipをインストール(または代わりにコマンドラインバージョンをダウンロード)して、次のPowerShellメソッドを使用します。

function create-7zip([String] $aDirectory, [String] $aZipfile){
    [string]$pathToZipExe = "$($Env:ProgramFiles)\7-Zip\7z.exe";
    [Array]$arguments = "a", "-tzip", "$aZipfile", "$aDirectory", "-r";
    & $pathToZipExe $arguments;
}

次のように呼び出すことができます。

create-7zip "c:\temp\myFolder" "c:\temp\myFolder.zip"

6
7zipがパスにある場合、書き込む必要があるのは「&7z c:\ temp \ myFolder c:\ temp \ myFolder.zip」
aboy021

5
インストールしたくない場合は、代わりにコマンドラインバージョンをダウンロードできます。(7-zipのダウンロードページをご覧ください。)これは単なる実行可能ファイルであり、コマンド構文は同じです。ただし、実行可能ファイルは別の名前です。何らかの理由で7za.exeです。私はこれをいくつかのプロジェクトで行ってきましたが、決してがっかりしませんでした。
jpmc26 2014年

すぐに機能する7zipパスに移行するまで、.netツールとPowershellツールを長時間試してみました。$ fileの単純なforeachループで& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
うまくいき

17

最初の回答が投稿されてから多くのことが変更されました。以下は、Compress-Archiveコマンドを使用した最新の例です。

パラメータで指定されたDraft.zip2つのファイルとDraftdoc.docxを圧縮して、新しいアーカイブファイルを作成するコマンド。この操作に指定された圧縮レベルは最適です。diagram2.vsdPath

Compress-Archive -Path C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip

パラメータで指定されたDraft.zip2つのファイルとDraft doc.docxを圧縮して、新しいアーカイブファイルを作成するコマンド。この操作に指定された圧縮レベルは最適です。Diagram [2].vsdLiteralPath

Compress-Archive -LiteralPath 'C:\Reference\Draft Doc.docx', 'C:\Reference\Images\Diagram [2].vsd'  -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip

このコマンドは、新しいアーカイブファイルを作成するDraft.zipには、C:\Archivesフォルダ。Pathパラメーターで特定のファイル名の代わりにワイルドカード文字が使用されたため、新しいアーカイブファイルにはC:\ Referenceフォルダー内のすべてのファイルが含まれています。

Compress-Archive -Path C:\Reference\* -CompressionLevel Fastest -DestinationPath C:\Archives\Draft

コマンドは、フォルダー全体からアーカイブを作成します。 C:\Reference

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft

PowerShellは、.zip拡張子をファイル名に自動的に追加します。


15

2つ編集 -このコードは、昔からの醜い、醜いクルージュです。君はそれを欲しがっていない。

これは、ここの例に従ってSystem.IO.Packaging.ZipPackage で.\into の内容を圧縮します.\out.zip

$zipArchive = $pwd.path + "\out.zip"
[System.Reflection.Assembly]::Load("WindowsBase,Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
$ZipPackage=[System.IO.Packaging.ZipPackage]::Open($zipArchive,
  [System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")
$in = gci .\in | select -expand fullName
[array]$files = $in -replace "C:","" -replace "\\","/"
ForEach ($file In $files)
{
   $partName=New-Object System.Uri($file, [System.UriKind]"Relative")
   $part=$ZipPackage.CreatePart($partName, "application/zip",
      [System.IO.Packaging.CompressionOption]"Maximum")
   $bytes=[System.IO.File]::ReadAllBytes($file)
   $stream=$part.GetStream()
   $stream.Write($bytes, 0, $bytes.Length)
   $stream.Close()
}
$ZipPackage.Close()

編集: 10MBを超えるような大きなファイル、YMMVでは信頼できません。何か 行うためのAppDomain証拠と分離ストレージと。使いやすい.NET 4.5 アプローチはPS v3からうまく機能しますが、私の場合はより多くのメモリが必要でした。PS v2から.NET 4を使用するには、構成ファイルにサポートされていない 調整が必要です。


ZipPackageの主な問題は、通常のZIPファイルではなく、コンテンツxmlファイルが含まれていることです。参照:[.netのZipPackageクラスの[Content_Types] .xmlを回避する方法-スタックオーバーフロー](stackoverflow.com/questions/3748970/…
aaron

@aaronこれを二度と使用しないもう一つの大きな理由!ここで「主要な問題」をめぐって激しい競争があります;)
noam

12

別のオプションの下に与える。これにより、フォルダー全体が圧縮され、指定した名前の指定したパスにアーカイブが書き込まれます。

.NET 3以上が必要

Add-Type -assembly "system.io.compression.filesystem"

$source = 'Source path here'    
$destination = "c:\output\dummy.zip"

If(Test-path $destination) {Remove-item $destination}

[io.compression.zipfile]::CreateFromDirectory($Source, $destination)

10

PowerShellを使用したCompress-Archive Zipファイルの作成というコマンドレット使用するPowerShell v5のネイティブソリューションを次に示します

Microsoft Docs for Compress-Archiveも参照してください 。

例1:

Compress-Archive `
    -LiteralPath C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd `
    -CompressionLevel Optimal `
    -DestinationPath C:\Archives\Draft.Zip

例2:

Compress-Archive `
    -Path C:\Reference\* `
    -CompressionLevel Fastest `
    -DestinationPath C:\Archives\Draft

例3:

Write-Output $files | Compress-Archive -DestinationPath $outzipfile

7

圧縮にはライブラリを使用します(7-ZipはMichalが提案するように優れています)。

7-Zipをインストールすると、インストールされたディレクトリに7z.exeコンソールアプリケーションが含まれます。
これを直接呼び出して、必要な圧縮オプションを使用できます。

DLLを使用する場合は、それも可能です。
7-Zipはフリーウェアであり、オープンソースです。


2
ここでのPowershellからAESの暗号化7ジッパーの使用例である:codeblog.theg2.net/2010/02/...
グレッグブレイ

7

どうSystem.IO.Packaging.ZipPackageですか?

.NET 3.0以降が必要です。

#Load some assemblys. (No line break!)
[System.Reflection.Assembly]::Load("WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")

#Create a zip file named "MyZipFile.zip". (No line break!)
$ZipPackage=[System.IO.Packaging.ZipPackage]::Open("C:\MyZipFile.zip",
   [System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")

#The files I want to add to my archive:
$files = @("/Penguins.jpg", "/Lighthouse.jpg")

#For each file you want to add, we must extract the bytes
#and add them to a part of the zip file.
ForEach ($file In $files)
{
   $partName=New-Object System.Uri($file, [System.UriKind]"Relative")
   #Create each part. (No line break!)
   $part=$ZipPackage.CreatePart($partName, "",
      [System.IO.Packaging.CompressionOption]"Maximum")
   $bytes=[System.IO.File]::ReadAllBytes($file)
   $stream=$part.GetStream()
   $stream.Write($bytes, 0, $bytes.Length)
   $stream.Close()
}

#Close the package when we're done.
$ZipPackage.Close()

アンダースヘッセルボム経由


5

なぜ誰もドキュメントを見ないのですか?あります、サポート方法 4.5ライブラリ誰もが参照している同じ.NETに組み込まれた空のzipファイルを作成し、そこに個々のファイルを追加するには。

コード例については、以下を参照してください。

# Load the .NET assembly
Add-Type -Assembly 'System.IO.Compression.FileSystem'

# Must be used for relative file locations with .NET functions instead of Set-Location:
[System.IO.Directory]::SetCurrentDirectory('.\Desktop')

# Create the zip file and open it:
$z = [System.IO.Compression.ZipFile]::Open('z.zip', [System.IO.Compression.ZipArchiveMode]::Create)

# Add a compressed file to the zip file:
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($z, 't.txt', 't.txt')

# Close the file
$z.Dispose()

私がすることをお勧めドキュメントを閲覧するあなたが持っている場合は任意の質問を。


2
これをありがとう、これは完璧です。特に、不適切に設計されており、zip内のパスを指定する適切な方法がないCompress-Archiveコマンドレットと比較してください。
Rafael Kitover

4

これは本当にあいまいですが、機能します。7za.exeは7zipのスタンドアロンバージョンであり、インストールパッケージで利用できます。

# get files to be send
$logFiles = Get-ChildItem C:\Logging\*.* -Include *.log | where {$_.Name -match $yesterday} 

foreach ($logFile in $logFiles)
{
    Write-Host ("Processing " + $logFile.FullName)

    # compress file
    & ./7za.exe a -mmt=off ($logFile.FullName + ".7z") $logFile.FullName

}

4

フォルダーではなく単一のファイルを圧縮する必要がある場合:http : //blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx

[CmdletBinding()]
Param(
     [Parameter(Mandatory=$True)]
     [ValidateScript({Test-Path -Path $_ -PathType Leaf})]
     [string]$sourceFile,

     [Parameter(Mandatory=$True)]
     [ValidateScript({-not(Test-Path -Path $_ -PathType Leaf)})]
     [string]$destinationFile
) 

<#
     .SYNOPSIS
     Creates a ZIP file that contains the specified innput file.

     .EXAMPLE
     FileZipper -sourceFile c:\test\inputfile.txt 
                -destinationFile c:\test\outputFile.zip
#> 

function New-Zip
{
     param([string]$zipfilename)
     set-content $zipfilename 
          ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
     (dir $zipfilename).IsReadOnly = $false
}

function Add-Zip
{
     param([string]$zipfilename) 

     if(-not (test-path($zipfilename)))
     {
          set-content $zipfilename 
               ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
          (dir $zipfilename).IsReadOnly = $false    

     }

     $shellApplication = new-object -com shell.application
     $zipPackage = $shellApplication.NameSpace($zipfilename)


     foreach($file in $input) 
     { 
          $zipPackage.CopyHere($file.FullName)
          Start-sleep -milliseconds 500
     }
}

dir $sourceFile | Add-Zip $destinationFile

このコードはシェルアプリケーションに依存し、それが完了するのを待つために500msを推測します...(ほとんどの場合)動作することについて私は異論はありません。ただし、圧縮ファイルの追加に時間がかかる(大きなファイルを追加したり、大きなzipを処理したりすると簡単に再現できる)すべての場合に、ポップアップを作成します。また、zip処理が指定されたスリープ時間よりも遅い場合、ファイルの追加に失敗し、ポップアップダイアログボックスが残ります。これはスクリプトにとってはひどいものです。また、COMオブジェクトに依存する他の回答は、これらの落とし穴には対応していないため、反対票を投じました。
冥王星

4

ソースフォルダーからすべてのファイルを圧縮し、宛先フォルダーにzipファイルを作成する作業コードを次に示します。

    $DestZip="C:\Destination\"
    $Source = "C:\Source\"

    $folder = Get-Item -Path $Source

    $ZipTimestamp = Get-Date -format yyyyMMdd-HHmmss;
    $ZipFileName  = $DestZip + "Backup_" + $folder.name + "_" + $ZipTimestamp + ".zip" 

    $Source

    set-content $ZipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
    # Wait for the zip file to be created.
    while (!(Test-Path -PathType leaf -Path $ZipFileName))
    {    
        Start-Sleep -Milliseconds 20
    } 
    $ZipFile = (new-object -com shell.application).NameSpace($ZipFileName)

    Write-Output (">> Waiting Compression : " + $ZipFileName)       

    #BACKUP - COPY
    $ZipFile.CopyHere($Source) 

    $ZipFileName
    # ARCHIVE

    Read-Host "Please Enter.."

4
function Zip-File
    {
    param (
    [string]$ZipName,
    [string]$SourceDirectory 

    )
       Add-Type -Assembly System.IO.Compression.FileSystem
       $Compress = [System.IO.Compression.CompressionLevel]::Optimal
       [System.IO.Compression.ZipFile]::CreateFromDirectory($SourceDirectory,
            $ZipName, $Compress, $false)
    }

注:
ZipName:作成するZipファイルの完全パス。

SourceDirectory:圧縮するファイルを含むディレクトリへのフルパス。


3

これはsonjzの答えのわずかに改良されたバージョンです、それは上書きオプションを追加します。

function Zip-Files(
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false)]
        [string] $zipfilename,
        [Parameter(Position=1, Mandatory=$true, ValueFromPipeline=$false)]
        [string] $sourcedir,
        [Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$false)]
        [bool] $overwrite)

{
   Add-Type -Assembly System.IO.Compression.FileSystem
   $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal

    if ($overwrite -eq $true )
    {
        if (Test-Path $zipfilename)
        {
            Remove-Item $zipfilename
        }
    }

    [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, $zipfilename, $compressionLevel, $false)
}

2
提供するソリューションについてもう少し説明を追加して、回答を詳しく説明していただけませんか?
アバリゾン

私は以前の答えを取り、上書きオプションを追加することでそれを改善しました。
ルーO.

3

これは、一時フォルダーを使用せずに、このStackOverflow 回答の C#から変換されたネイティブの.Net 4.5を使用せずに単一のファイルを圧縮する場合にも機能しますここから取り出したより良い構文を使用しています。

使用法:

ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql

コード:

function ZipFiles([string] $zipFilename, [string] $sourceFile, [string] $filename)
{
    $fullSourceFile = (Get-Item -Path "$sourceFile" -Verbose).FullName
    $fullZipFile = (Get-Item -Path "$zipFilename" -Verbose).FullName

    Add-Type -AssemblyName System.IO
    Add-Type -AssemblyName System.IO.Compression
    Add-Type -AssemblyName System.IO.Compression.FileSystem

    Using-Object ($fs = New-Object System.IO.FileStream($fullZipFile, [System.IO.FileMode]::Create)) {
         Using-Object ($arch = New-Object System.IO.Compression.ZipArchive($fs, [System.IO.Compression.ZipArchiveMode]::Create)) {
             [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($arch, $fullSourceFile, $filename)
        }
    }
}

使用:

function Using-Object
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [AllowEmptyString()]
        [AllowEmptyCollection()]
        [AllowNull()]
        [Object]
        $InputObject,

        [Parameter(Mandatory = $true)]
        [scriptblock]
        $ScriptBlock
    )

    try
    {
        . $ScriptBlock
    }
    finally
    {
        if ($null -ne $InputObject -and $InputObject -is [System.IDisposable])
        {
            $InputObject.Dispose()
        }
    }
}

優れた。そのshell.applicationビジネスまたは7-Zip /その他の個別のユーティリティを使用せずに1つのファイルを圧縮する方法を探していました。私はUsing-Object関数も気に入っていますが、それなしで短くて迅速なダーティなアプローチを採用しました。
チャーリージョント

2

このスニペットを使用して、データベースのバックアップフォルダーでまだ圧縮されていないバックアップファイルを確認し、7-Zipを使用してそれらを圧縮し、最後に*.bakファイルを削除してディスク領域を節約します。一部のファイルが圧縮されないようにするために、ファイルは圧縮前に長さ(最小から最大)で並べられていることに注意してください。

$bkdir = "E:\BackupsPWS"
$7Zip = 'C:\"Program Files"\7-Zip\7z.exe'

get-childitem -path $bkdir | Sort-Object length |
where
{
    $_.extension -match ".(bak)" -and
    -not (test-path ($_.fullname -replace "(bak)", "7z"))
} |
foreach
{
    $zipfilename = ($_.fullname -replace "bak", "7z")
    Invoke-Expression "$7Zip a $zipfilename $($_.FullName)"
}
get-childitem -path $bkdir |
where {
    $_.extension -match ".(bak)" -and
   (test-path ($_.fullname -replace "(bak)", "7z"))
} |
foreach { del $_.fullname }

ここでは、PowerShellスクリプトをチェックして、それらのファイルをFTP経由でバックアップ、圧縮、および転送できます


2

WinRARがインストールされている場合:

function ZipUsingRar([String] $directory, [String] $zipFileName)
{
  Write-Output "Performing operation ""Zip File"" on Target ""Item: $directory Destination:"
  Write-Output ($zipFileName + """")
  $pathToWinRar = "c:\Program Files\WinRAR\WinRar.exe";
  [Array]$arguments = "a", "-afzip", "-df", "-ep1", "$zipFileName", "$directory";
  & $pathToWinRar $arguments;
}

引数の意味:afzipはzipアーカイブを作成し、dfはファイルを削除し、ep1はアーカイブ内に完全なディレクトリパスを作成しません


2

ここでは、cmd.exeまたはsshから起動するための完全なコマンドラインの例や、必要なものを示しています。

powershell.exe -nologo -noprofile -command "&{ Add-Type -A 'System.IO.Compression.FileSystem' [System.IO.Compression.ZipFile]::CreateFromDirectory('c:/path/to/source/folder/', 'c:/path/to/output/file.zip');}"

よろしく


2

[System.IO.IOException]クラスをロードしてそのメソッドを使用することは、PowerShellにネイティブではないクラスであるため、不要なエラーを抑制するための重要なステップです。

スクリプトをTにエラー制御しましたが、[System.IO.Compression.ZipFile]クラスの使用中に余分な赤い「ファイルが存在します」という大量の出力が出力されました

function zipFiles(
    [Parameter(Position=0, Mandatory=$true]
    [string] $sourceFolder,
    [Parameter(Position=1, Mandatory=$true]
    [string]$zipFileName,
    [Parameter(Position=2, Mandatory=$false]
    [bool]$overwrite)

{   
Add-Type -Assembly System.IO
Add-Type -Assembly System.IO.Compression.FileSystem

$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal

$directoryTest = (Test-Path $dailyBackupDestFolder)
$fileTest = (Test-Path $zipFileName)

if ( $directoryTest -eq $false) 
{ 
    New-Item -ItemType Directory -Force -Path $dailyBackupDestFolder 
}

     if ( $fileTest -eq $true)
     {
           if ($overwrite -eq $true ){Remove-Item $zipFileName}
     }   


    try
    {
         [System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder,$zipFileName,$compressionLevel)       

    }
    catch [System.IO.IOException] 
    {
       Write-Output ($dateTime + ' | ' + $_.Exception.Message ) | Out-File $logFile -append -force 
    }
} 

ここで私がしていることは、これらのIOエラーをキャッチすることです。たとえば、既存のファイルにアクセスし、そのエラーをキャッチして、より大きなプログラムで維持しているログファイルに転送します。


2

Windowsでディレクトリを圧縮および抽出するための完全なコマンドラインコマンドは次のとおりです。

  • 圧縮の場合:

    powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::CreateFromDirectory('C:\Indus','C:\Indus.zip'); }"
  • 抽出用:

    powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem';[IO.Compression.ZipFile]::ExtractToDirectory('C:\Indus.zip','C:\Indus'); }"


-4

このスクリプトは、すべてのディレクトリを反復処理し、それぞれを圧縮します

Get-ChildItem -Attributes d | foreach {write-zip $ .Name "$($ .Name).zip"}


1
7歳の質問に、この関連の一部だけは、2009年に受け入れ答えた「ライト・ジップ」、だった
拒否された
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.