Як створити zip-архів за допомогою PowerShell?


Відповіді:


124

Якщо ви перейдете до CodePlex і захопите розширення спільноти PowerShell , ви можете використовувати їх write-zipкомандлет.

З тих пір

Підготовка до вимкнення CodePlex знаходиться в режимі лише для читання

ви можете зайти в галерею PowerShell .


114
Так, і він використовує 7z як основну бібліотеку для більшості своїх командлетів стиснення. Я знаю, що я реалізував це;) +1
x0n

1
lol приємна робота, x0n. Я заперечив постачальника магазинів кормів у PSCX. Трохи менше практичних, але тон веселощів. :)
Метт Гамільтон

1
Якщо він використовує 7z, чи можливий поштовий індекс за допомогою пароля?
мак

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

9
Powershell 5 поставляється з командлетами Compress-Archive, які створюють .zip blogs.technet.microsoft.com/heyscriptingguy/2015/08/13/…
Benoit Patra

255

Чиста альтернатива PowerShell, яка працює з PowerShell 3 та .NET 4.5 (якщо ви можете використовувати):

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-архіву, який ви хочете створити, і повний шлях до каталогу, що містить файли, які ви хочете скопіювати.


1
Насправді для цього потрібен Powershell 3.0 або просто .net 4.5? Мені дуже зручно виглядати фактичні функції PowerShell, а не просто програмування .net
bwerks

@bwerks дивіться розділ "редагувати" тут
1313

Я шукав спосіб просто стиснути один великий файл, але, мабуть, для цього немає способу. Мені довелося написати код, який створив би новий каталог, скопіюйте туди єдиний файл, стисніть цей каталог у новий поштовий файл, а потім видаліть каталог, щоб очистити.
Баодад

1
@Baodad, дивись мою відповідь.
Дерік

Треба було прочитати, що мені потрібен повний шлях. Хлопчик, що було заплутано! До речі, це має бути прийнята відповідь
Калонь Колоб

244

PowerShell v5.0 додає Compress-Archiveта Expand-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.
Охад Шнайдер

Тепер доступний тут: microsoft.com/en-us/download/details.aspx?id=50395
starlocke

2
З абзацу 2 Compress-Archiveопису: "... максимальний розмір файлу, який ви можете стиснути за допомогою Compress-Archive, наразі становить 2 Гб. Це System.IO.Compression.ZipFileобмеження базового API" Однак, якщо ви використовуєте, ви можете обійти це обмеження.
AMissico

2
Ліміт 2 Гб успадкував від System.IO.Compression.ZipFile. Якщо рамка .NET, яку ви використовуєте, не має цього обмеження, CmdLet не повинен досягати цього обмеження. Я перевірив у коді.
TravisEz13

2
@Pramod немає -OutputPathпараметра.
BrainSlugs83

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

Я занадто довго намагався за допомогою інструментів .net та Powershell, поки не пішов 7zip шлях, який працював відразу. Простий цикл foreach на $ file робить трюк& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
SebK

17

Лот змінився з моменту опублікування початкової відповіді. Ось кілька останніх прикладів за допомогою команди Compress-Archive .

Команда створити новий архівний файл, Draft.zipстискаючи два файли, Draftdoc.docxі diagram2.vsd, визначені Pathпараметром. Рівень стиснення, визначений для цієї операції, є оптимальним.

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

Команда створює новий архівний файл, Draft.zipстискаючи два файли, Draft doc.docxі Diagram [2].vsd, визначені LiteralPathпараметром. Рівень стиснення, визначений для цієї операції, є оптимальним.

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папці. Новий архівний файл містить кожен файл у папці C: \ Reference , тому що замість конкретних імен файлів у параметрі Path використовувався символ підстановки .

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

Редагувати два - Цей код - некрасивий, некрасивий клубок із старих часів. Ти цього не хочеш.

Це стискає вміст , .\inщоб .\out.zipз System.IO.Packaging.ZipPackage наслідуючи приклад тут

$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, але в моєму випадку хотів отримати більше пам'яті. Для використання .NET 4 з PS v2, конфігураційним файлам потрібна непідтримувана настройка .


Основна проблема ZipPackage полягає в тому, що це не звичайний ZIP- файл, але містить вміст xml-файлу. дивіться: [як уникнути [Content_Types] .xml у класі. ZipPackage .net - Переповнення стека] ( stackoverflow.com/questions/3748970/… )
aaron

@aaron Ще одна чудова причина не використовувати це ніколи більше! У вас є жорстка конкуренція за «основною проблемою» тут;)
Ноам

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 v5, використовуючи командлет Compress-Archive Створення Zip-файлів за допомогою PowerShell .

Див. Також Документи Microsoft для архіву 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 - це добре, як пропонує Міхал ).

Якщо ви встановите 7-Zip , встановлений каталог буде містити 7z.exeконсольну програму.
Ви можете викликати його безпосередньо та використовувати будь-який потрібний варіант стиснення.

Якщо ви хочете співпрацювати з DLL, це також має бути можливим.
7-Zip - безкоштовна програма з відкритим кодом.


2
Ось приклад використання 7 zip з шифруванням AES від Powershell: 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

Чому ніхто не дивиться документацію ?? Існує підтримуваний метод створення порожнього zip-файлу та додавання до нього окремих файлів, вбудованих у ту саму бібліотеку .NET 4.5, на яку посилаються всі.

Нижче див. Приклад коду:

# 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
Дякую за це, це ідеально. Особливо порівняно з командлетом Compress-Archive, який погано розроблений і не має хорошого способу вказівки шляхів ДО Zip.
Рафаель Кітовер

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

Цей код покладається на додаток оболонки, а потім здогадується 500 мільйонів чекати, коли він закінчиться ... Я не погоджуюся з тим, що він працює (у більшості випадків). Але це створює спливаючі вікна, як ви використовуєте його в кожному випадку, коли додавання стисненого файлу займає деяку кількість часу (легко відтворюється при додаванні великих файлів або роботі з великими блискавками). Також якщо будь-яка поштова операція проходить повільніше, ніж будь-який вказаний час сну, вона не зможе додати файл і не залишить після цього спливаюче діалогове вікно. Це страшно для сценаріїв. Я також відмовився від іншої відповіді, яка покладається на об’єкт COM, оскільки він не стосується цих підводних каменів.
Плутон

4

Ось робочий код, збираючи всі файли з вихідної папки та створюючи поштовий файл у папці призначення.

    $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
Чи можете ви детальніше розглянути свою відповідь, додавши трохи більше опису про рішення, яке ви надаєте?
абарізон

Я взяв попередню відповідь і вдосконалив її, додавши опцію перезапис, не набагато більше сказати!
Лу О.

3

Це також повинно працювати для стиснення одного файлу без використання темп-папки та використання нативної .Net 4.5, перетвореної на C # з цієї відповіді StackOverflow . Він використовує приємніше, використовуючи синтаксис, взятий звідси .

Використання:

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 / інших окремих утиліт. Мені також подобається ця 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 
    }
} 

Що я тут роблю, - це виявлення цих помилок вводу-виводу, таких як доступ до файлів, які вже існують, виявлення цієї помилки та перенаправлення до лог-файлу, який я підтримую за допомогою більшої програми.


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 -розподіляє d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}


1
Тільки частина цього відношення до 7 - річного питання була «запис блискавка», який був загальноприйнятим відповіддю в 2009 році
Відхилено
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.