পাওয়ারশেলের সাহায্যে একটি জিপ সংরক্ষণাগার কীভাবে তৈরি করবেন?


উত্তর:


124

আপনি যদি কোডপ্লেক্সে পৌঁছে যান এবং পাওয়ারশেল সম্প্রদায় এক্সটেনশানগুলিwrite-zip ধরেন তবে আপনি সেমিডলেট ব্যবহার করতে পারেন ।

থেকে

কোডপ্লেক্স বন্ধের প্রস্তুতির জন্য কেবল পঠন মোডে রয়েছে in

আপনি পাওয়ারশেল গ্যালারী যেতে পারেন ।


114
হ্যাঁ, এবং এটি এর বেশিরভাগ সংক্ষেপণ সেমিডলেটগুলির জন্য মূল গ্রন্থাগার হিসাবে 7z ব্যবহার করে। আমি জানি, কারণ আমি এটি প্রয়োগ করেছি;) +1
x0n

1
LOL সুন্দর কাজ, x0n। আমি পিএসসিএক্সে ফিড স্টোর সরবরাহকারীকে নকল করেছি। সামান্য কম ব্যবহারিক কিন্তু মজাদার টন। :)
ম্যাট হ্যামিল্টন

1
যদি এটি 7z ব্যবহার করে তবে পাসওয়ার্ড ব্যবহার করে জিপ করা সম্ভব?
ম্যাক করুন

1
@ সিমিডিমেটেডwrite-zip [input file/folder] [output file]
জোশস্ক্রেডার

9
PowerShell 5 একটি কম্প্রেস-সংরক্ষাণাগার cmdlets যে .zip সৃষ্টি দিয়ে আসে blogs.technet.microsoft.com/heyscriptingguy/2015/08/13/...
বেনইট পত্র

255

একটি খাঁটি পাওয়ারশেল বিকল্প যা পাওয়ারশেল 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)
}

আপনি যে জিপ সংরক্ষণাগারটি তৈরি করতে চান তার পুরো পথ এবং আপনি যে ফাইলগুলি জিপ করতে চান সেগুলি সম্বলিত ডিরেক্টরিটির পুরো পথটি পাস করুন।


1
এটির জন্য আসলে পাওয়ারশেল 3.0.০ বা ঠিক নেট .৪.৪ প্রয়োজন? আমার কাছে প্রকৃত পাওয়ারশেল বৈশিষ্ট্যগুলিতে খুব হালকা দেখায়, পরিবর্তে কেবল নেট প্রোগ্রামিং।
বুয়ার্কস

@bwerks 'সম্পাদনা করুন' অংশ দেখতে এখানে
নোয়াম

আমি কেবল একটি একক বৃহত ফাইল সঙ্কুচিত করার জন্য একটি উপায় খুঁজছিলাম, তবে দৃশ্যত এটির জন্য কোনও পদ্ধতি নেই। আমাকে এমন একটি কোড লিখতে হয়েছিল যা একটি নতুন ডিরেক্টরি তৈরি করবে, সেখানে একক ফাইলটি অনুলিপি করবে, সেই ডিরেক্টরিটি একটি নতুন জিপ ফাইলে সংকুচিত করবে, তারপরে ডিরেক্টরিটি মুছতে মুছবে।
বাওদাদ

1
@ বোয়াদাদ, আমার উত্তর দেখুন।
ধেরিক

আমার পড়া উচিত ছিল যে আমার পুরো পথের প্রয়োজন ছিল। ছেলেটি যে গুলিয়ে গেল! বিটিডাব্লু এর এই স্বীকৃত উত্তর হওয়া উচিত
কলব ক্যানিয়ন

244

পাওয়ারশেল ভি 5.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
পাওয়ারশেল ভি 5.0 এখন আনুষ্ঠানিকভাবে প্রকাশ করা হয়েছে। এটি উইন্ডোজ 10 এর সাথেও আসে
ওহাদ স্নাইডার

এখন এখানে উপলভ্য: মাইক্রোসফট
/en-us/download/details.aspx?id=50395

2
Compress-Archiveবর্ণনার 2 অনুচ্ছেদ থেকে : "... আপনি কমপ্রেস-সংরক্ষণাগার ব্যবহার করে সংক্ষিপ্ত করতে পারবেন এমন সর্বোচ্চ ফাইলের আকার বর্তমানে 2 জিবি This এটি অন্তর্নিহিত এপিআইয়ের একটি সীমাবদ্ধতা" তবে, আপনি যদি System.IO.Compression.ZipFileএই সীমাবদ্ধতাটি বাইপাস করতে পারেন তবে ।
এমিসিকো

2
2 জিবি সীমাটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল System.IO.Compression.ZipFile। আপনি যে নেট নেট ফ্রেমওয়ার্কটি ব্যবহার করছেন সেটি যদি এই সীমা না থাকে, তবে সিএমডিলেট এই সীমাটিকে আঘাত করবে না। আমি কোডটিতে যাচাই করেছি।
ট্র্যাভিসএজ 13

2
@ প্রমডের কোনও -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") ;

উল্লিখিত হিসাবে, সম্পূর্ণ বৈশিষ্ট্য-কম, সুতরাং ওভাররাইট পতাকা প্রত্যাশা করবেন না ।

আপডেট: অন্যান্য বিকাশকারীদের জন্য নীচে দেখুন যা বছরের পর বছর ধরে এটিতে প্রসারিত হয়েছে ...


আপনি বৈশিষ্ট্যহীন পদ্ধতিটি ব্যবহার করবেন কেন?
প্লুটো

এটি পোস্ট এবং নজির তারিখের ক্রম হিসাবে গ্রহণযোগ্য উত্তর হওয়া উচিত। আপনার আপডেট হওয়া মতামত হিসাবে - এখন এটি করার অনেক উপায় রয়েছে। আমি এই কার্যকারিতাটির প্রয়োজনের মুখোমুখি হয়েছি এবং আমি পাওয়ারশেলের সাথে রয়েছি 4 আমি যে প্রথম জিনিসটি পেয়েছি সেটি হল দেশীয় উপায়। এটি ২০০৯ সালে একটি ভাল প্রশ্ন ছিল I আমি এখনও মনে করি মূলত জিজ্ঞাসা করা হলে প্রশ্নটিতে আরও গবেষণা করা যেতে পারে।
DtechNet

45

7zip ইনস্টল করুন (বা পরিবর্তে কমান্ড লাইন সংস্করণটি ডাউনলোড করুন) এবং এই পাওয়ারশেল পদ্ধতিটি ব্যবহার করুন:

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-জিপের ডাউনলোড পৃষ্ঠাটি দেখুন)) এটি কেবলমাত্র কার্যকর করা যায়, এবং কমান্ড সিনট্যাক্সটি একই। এক্সিকিউটেবল একটি আলাদা নাম, যদিও; এটি কোনও কারণে 7za.exe। আমি এটি বেশ কয়েকটি প্রকল্পে করেছি এবং কখনও হতাশ হইনি।
jpmc26

আমি এখনই কাজ করে এমন worked জীপ পথে না যাওয়া পর্যন্ত নেট ও পাওয়ারশেল সরঞ্জামগুলির সাহায্যে অনেক দীর্ঘ পথ চেষ্টা করেছি। & "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
Fore

17

প্রাথমিক উত্তর পোস্ট হওয়ার পরে লট পরিবর্তন হয়েছে। কমপ্রেস-সংরক্ষণাগার কমান্ডটি ব্যবহার করে সাম্প্রতিকতম কয়েকটি উদাহরণ এখানে ।

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.zipC:\Archivesফোল্ডার। নতুন সংরক্ষণাগার ফাইলে সি: \ রেফারেন্স ফোল্ডারের প্রতিটি ফাইল থাকে কারণ পাথ প্যারামিটারে নির্দিষ্ট ফাইলের নামের জায়গায় একটি ওয়াইল্ডকার্ড অক্ষর ব্যবহৃত হত ।

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

কমান্ড একটি সম্পূর্ণ ফোল্ডার থেকে একটি সংরক্ষণাগার তৈরি করে, C:\Reference

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

পাওয়ারশেল .zipস্বয়ংক্রিয়ভাবে ফাইলের নামের সাথে এক্সটেনশনটি যুক্ত করে।


15

দুটি সম্পাদনা করুন - এই কোডটি পুরানো দিন থেকে একটি কুৎসিত, কুশ্রী ক্লুজ ge আপনি এটি চান না।

এই বিষয়বস্তু সংকোচন .\inকরার .\out.zipSystem.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()

সম্পাদনা করুন: বড় ফাইলগুলির জন্য অবিশ্বাস্য , সম্ভবত> 10 এমবি, ওয়াইএমএমভি। অ্যাপডোমেন প্রমাণ এবং বিচ্ছিন্ন স্টোরেজ সহ কিছু করার । বন্ধুত্বপূর্ণ। নেট 4.5 পদ্ধতির PS v3 থেকে দুর্দান্তভাবে কাজ করে, তবে আমার ক্ষেত্রে আরও স্মৃতি চেয়েছিল। দ্রষ্টব্য v2 থেকে .NET 4 ব্যবহার করার জন্য, কনফিগ ফাইলগুলি একটি প্রয়োজন অসমর্থিত খামচি


জিপপ্যাকেজের প্রধান সমস্যাটি হ'ল এটি সাধারণ জিপ ফাইল নয়, তবে এতে একটি লিখিত সামগ্রী xML ফাইল রয়েছে। দেখুন: [এড়াতে কিভাবে [CONTENT_TYPES] .net এর ZipPackage ক্লাসে .xml - স্ট্যাক ওভারফ্লো] ( stackoverflow.com/questions/3748970/... )
হারুন

@ আরোন আর একটি দুর্দান্ত কারণ এটিকে আর কখনও ব্যবহার না করার জন্য! আপনি এখানে "বড় সমস্যা" এর জন্য কঠোর প্রতিযোগিতা পেয়েছেন;)
সোমবার

12

অন্য বিকল্পের নীচে দেওয়া। এটি একটি পূর্ণ ফোল্ডারটি জিপ আপ করবে এবং প্রদত্ত নামের সাথে একটি নির্দিষ্ট পথে সংরক্ষণাগারটি লিখবে।

নেট। 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

পাওয়ারশেল v5 এর জন্য একটি স্থানীয় সমাধান এখানে রয়েছে, সেমিএসলেট 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-জিপটি ভাল )।

আপনি যদি 7-জিপ ইনস্টল করেন তবে ইনস্টল করা ডিরেক্টরিতে 7z.exeকনসোল অ্যাপ্লিকেশনটি থাকবে।
আপনি এটিকে সরাসরি আবেদন করতে পারেন এবং যে কোনও সংকোচন বিকল্পটি আপনি চান ব্যবহার করতে পারেন।

আপনি যদি ডিএলএল এর সাথে জড়িত থাকতে চান তবে তাও সম্ভব হওয়া উচিত।
7-জিপ হ'ল ফ্রিওয়্যার এবং ওপেন সোর্স।



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

কেন কেউ ডকুমেন্টেশনের দিকে তাকাচ্ছে না ?? একটি খালি জিপ ফাইল তৈরি করার এবং এটিতে আলাদা আলাদা ফাইল যুক্ত করার একটি সমর্থিত পদ্ধতি রয়েছে N

একটি কোড উদাহরণের জন্য নীচে দেখুন:

# 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
এই জন্য আপনাকে ধন্যবাদ, এটি নিখুঁত। বিশেষত কমপ্রেস-সংরক্ষণাগার সিএমডিলেট এর সাথে তুলনা করুন যা খারাপভাবে ডিজাইন করা হয়েছে এবং জিপটি ভিতরে specুকিয়ে দেওয়ার পথগুলির নির্দিষ্টকরণের ভাল উপায় নেই।
রাফায়েল কিটওভার

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/zip-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

সোর্স ফোল্ডার থেকে সমস্ত ফাইল জিপ করে গন্তব্য ফোল্ডারে একটি জিপ ফাইল তৈরি করুন এখানে ওয়ার্কিং কোড is

    $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)
    }

দ্রষ্টব্য:
জিপনেম: আপনি যে জিপ ফাইলটি তৈরি করতে চান তার সম্পূর্ণ পথ।

সোর্স ডিরেক্টরি: আপনি জিপ করতে চান এমন ফাইলগুলি অন্তর্ভুক্ত করার নির্দেশিকাটির সম্পূর্ণ পথ।


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

এটি কোনও অস্থায়ী ফোল্ডারটি ব্যবহার না করে এবং কোনও নেটিভ। নেট 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-জিপ / অন্যান্য পৃথক ইউটিলিটিগুলি ব্যবহার না করেই একটি ফাইল জিপ করার কোনও উপায় খুঁজছিলাম । আমি Using-Objectফাংশনটিও খুব পছন্দ করি, যদিও আমি তা ছাড়াই একটি সংক্ষিপ্ত, দ্রুত-নোংরা পদ্ধতির জন্য গিয়েছিলাম।
চার্লি জেন্ট

2

আমি এই স্নিপেটটি এখনও সংকুচিত না হওয়া ব্যাকআপ ফাইলগুলির জন্য আমার ডাটাবেস ব্যাকআপ ফোল্ডারটি পরীক্ষা করতে, 7-জিপ ব্যবহার করে সংকুচিত করে এবং অবশেষে *.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 }

এখানে আপনি এফটিপি-র মাধ্যমে ফাইলগুলি ব্যাকআপ, সংকোচন এবং স্থানান্তর করতে একটি পাওয়ারশেল স্ক্রিপ্ট চেক করতে পারেন ।


2

আপনি যদি উইনআরআর ইনস্টল করেছেন:

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;
}

আর্গুমেন্টের অর্থ: আফজিপ জিপ সংরক্ষণাগার তৈরি করে, ডিএফ ফাইল মুছে দেয়, এপি 1 আর্কাইভের মধ্যে পুরো ডিরেক্টরি পথ তৈরি করে না


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]অযৌক্তিক ত্রুটিগুলি দমনে শ্রেণিটি লোড করা এবং এর পদ্ধতিগুলি ব্যবহার করা একটি গুরুত্বপূর্ণ পদক্ষেপ, কারণ এটি বিদ্যুতের কোনও স্থানীয় নাগরিক, সুতরাং এটি ছাড়াই ত্রুটিগুলির বিভিন্ন প্রেক্ষাপট আশা করুন।

আমি আমার স্ক্রিপ্টটি টি-তে ত্রুটি-নিয়ন্ত্রিত করেছি, তবে [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

কমপ্রেসিং এবং এক্সট্র্যাক্টিং ডিরেক্টরিটি উইন্ডোজে সম্পূর্ণ কমান্ড-লাইন কমান্ডগুলি নিম্নরূপ:

  • সংকোচনের জন্য:

    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

এই স্ক্রিপ্টটি সমস্ত ডিরেক্টরি পুনরাবৃত্তি করে এবং প্রতিটি জিপ করে

গেট-চাইল্ড আইটেম -অ্যাট্রিবিউটস ডি | foreach {write-zip $। নাম "$ ($। নাম)। জিপ"}


1
7 বছর বয়সী প্রশ্ন এই প্রাসঙ্গিক একমাত্র অংশ ছিল "লেখা-জিপ", যা 2009 সালে গৃহীত উত্তর ছিল
প্রত্যাখ্যাত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.