আপনি কেবলমাত্র উইন্ডো'র বিল্ট-ইন ফাইলগুলি জিপ করার ক্ষমতা ব্যবহার করে কমান্ড প্রম্পট থেকে একটি ফাইল জিপ করতে পারেন?


111

আমার একটি ব্যাচ ফাইল রয়েছে যা একটি পাঠ্য ফাইলকে আউটপুট করে। আমি ভেবেছিলাম ভাল লাগবে যদি আমিও এটি জিপ করতে পারি।

এটি অনিয়ন্ত্রিত পরিবেশে ব্যবহৃত হবে, সুতরাং তৃতীয় পক্ষের সফ্টওয়্যার পণ্যগুলির যেমন 7-জিপ ইত্যাদির উপস্থিতি সম্পর্কে অনুমান করা যায় না । ফাইলগুলিকে জিপ করার জন্য এটি উইন্ডোজের এখন অন্তর্নির্মিত ক্ষমতা ব্যবহার করা দরকার।


1
আপনি কি পাওয়ারশেল বা ডাব্লুএসএইচ স্ক্রিপ্টিং ব্যবহার করতে পারেন? কমান্ডলাইন থেকে উইন্ডোজ বিল্টিন জিপ হ্যান্ডলিংয়ের একমাত্র উপায় হতে পারে। অন্যথায়, মলি যেমন উল্লেখ করেছেন, আপনার একটি তৃতীয় পক্ষের সরঞ্জাম প্রয়োজন।
কোয়াকোট কোয়েসোট

1
সুতরাং আপনি কাউকে একটি ব্যাচের ফাইল প্রেরণ করছেন এবং আপনি তাকে কিছু সংক্ষিপ্তভাবে সংযুক্ত gzip.exe প্রেরণ করতে পারবেন না?
আকিরা

ওপির প্রশ্নটি একটি দুর্দান্ত প্রশ্ন (@ কোয়াকুইকোটের বিস্ময়কর অভিযোগ সত্ত্বেও)। উইন্ডোজ যেহেতু এটি সেন্ডটো-এর অধীনে একক ক্লিক হিসাবে সরবরাহ করে, তাই একটি বিএটি ফাইলে একটি ব্যবহারযোগ্য কমান্ড থাকা উচিত । সুতরাং এটি উত্তম প্রশ্ন এমনকি উত্তরটি যদি না হয় এবং তৃতীয় পক্ষের সরঞ্জামটি সমান হতে পারে বা নাও হয় (হাস্যকরভাবে) অবলম্বন করতে হয়।
জন কমস

এটি টমাসের লিঙ্কটি কোনও ফোল্ডারের সামগ্রীতে জিপ করার জন্য একটি ভাল লিখিত স্ক্রিপ্ট রয়েছে। এটিকে কাজ করতে কেবল স্ক্রিপ্টটিকে একটি ব্যাচ ফাইলে অনুলিপি করুন এবং ফোল্ডারটি জিপ করা (উত্স) নির্দিষ্ট করে এটি চালিত করুন। ডেস্কটপের স্ক্রিপ্টে এটি ডিফল্ট হওয়ার কারণে গন্তব্য ডিরেক্টরিটি উল্লেখ করার প্রয়োজন নেই ("% USERPROFILE% \ ডেস্কটপ")
অভিজিৎ

3
সবচেয়ে সহজ হবে, একটি সেন্টিমিডি প্রম্পটে: powershell.exe Compress-Archive file-to-zip.txt zippedfile.zip(এটি ফোল্ডারের সাথেও কাজ করে)
টমাসগুইনেট

উত্তর:


85

এখানে একটি সমস্ত ব্যাচ ফাইল সমাধান (আমার অন্যান্য উত্তরের একটি প্রকরণ) যা নামের একটি ফাইল জিপ করে c:\ue_english.txtএটিকে দেবে C:\someArchive.zip:

set FILETOZIP=c:\ue_english.txt

set TEMPDIR=C:\temp738
rmdir %TEMPDIR%
mkdir %TEMPDIR%
xcopy /s %FILETOZIP% %TEMPDIR%

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo wScript.Sleep 2000 >> _zipIt.vbs

CScript  _zipIt.vbs  %TEMPDIR%  C:\someArchive.zip

pause

সঞ্চিত ফোল্ডারের পিতামাতার কাছে লেখার অ্যাক্সেস প্রয়োজন TEMPDIR। যেহেতু প্রায়শই এটি হয় না ড্রাইভ সি এর রুট TEMPDIRপরিবর্তন করতে হতে পারে।

.batস্ক্রিপ্টটিতে থাকা ফোল্ডারের জন্য লেখার অ্যাক্সেসও প্রয়োজন (এটি সেখানে কোনও ফাইল উত্পন্ন করে)।

এছাড়াও, দয়া করে নোট করুন যে সংকুচিত ফাইলের জন্য ফাইল এক্সটেনশনটি অবশ্যই হওয়া উচিত .zip। অন্য এক্সটেনশন ব্যবহারের চেষ্টাগুলির ফলে স্ক্রিপ্ট ত্রুটি হতে পারে। পরিবর্তে, .zipফাইলটি তৈরি করুন এবং এটির পুনরায় নামকরণ করুন।


3
@quack আমি এমন কিছু অস্পষ্ট কমান্ডের আশায় থাকি যা সম্পর্কে আমি জানতাম না। আমি দেখতে পাচ্ছি যে আপনি কীভাবে খুঁজে পেতে পারেন যে যদি একটি কঠিন প্রয়োজনীয়তা উপস্থিত না থাকে তবে কাউকে বাইরে রাখার অর্থ নয়।
অ্যারন বুশ

@ পিটারমোরটেনসেন: পাওয়ারশেলের সাহায্যে এটি কতটা সরল করা হয়েছে তা দেখতে আকর্ষণীয় বা নাও হতে পারে। এখানে একটি 5 লাইন উদাহরণ , এছাড়াও একটি অস্তিত্ব আছে write-zipcmdlet থেকে ডাউনলোড করা যাবে এমন Pscx
তমারা উইজসম্যান

আমি জিপ.এক্সে এবং সিউইন 1.ডিএল (3 এমবি) ব্যবহার করে জিপটি সন্তুষ্ট করি এবং ব্যবহারটি একটি লাইন ... কিছু ব্যাচের কোড ব্যবহার করার জন্য জিপ থেকেই। আমি জানি যে আরএগভি সহ পিএইচপি ব্যংকম্পাইল ব্যবহার করতে এবং এটিতে একটি ফাইল পাস করতে পারেন। দুর্দান্ত লাগছে। "উইন্ডোজ কমান্ড লাইন থেকে একটি জিপ" একটি পুরানো বিজ্ঞান কল্পকাহিনী সিনেমা, তাই না?
erm3nda

আমাদের কেন একটি টেম্প্প ফোল্ডার ব্যবহার করতে হবে TEMPDIR? আমার মনে হয় আপনার উদ্দেশ্যটি ঠিক FILETOZIPএকটি ফোল্ডার দিয়ে ফাইলটি মোড়ানো ?
নাম জি ভিইউ

@ পিটার মর্টেনসেন, আমি জানি এটি একটি পুরানো থ্রেড এবং আমি প্রায় এটিই সন্ধান করছি। একটি ছোট ফাইলকে ছোট অংশে সংকোচন করার বিকল্প নেই?
জনজি

38

এটা তোলে হয় (আমি এটা পরীক্ষিত হয়েছে) কোন অতিরিক্ত সফ্টওয়্যার ইনস্টল ছাড়া ফাইল zip করা সম্ভব। সমাধানটি হ'ল:

C:\someArchive.zipফোল্ডারে সমস্ত ফাইল সম্বলিত একটি জিপ ফাইল তৈরি করতে কমান্ড-লাইন উইন্ডোতে এটি চালান C:\test3:

CScript  zip.vbs  C:\test3  C:\someArchive.zip

যেখানে ফাইল zip.vbsরয়েছে:

' Get command-line arguments.
Set objArgs = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
InputFolder = FS.GetAbsolutePathName(objArgs(0))
ZipFile = FS.GetAbsolutePathName(objArgs(1))

' Create an empty ZIP file.
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)

Set objShell = CreateObject("Shell.Application")

Set source = objShell.NameSpace(InputFolder).Items

objShell.NameSpace(ZipFile).CopyHere(source)

' Required to let the ZIP command execute
' If this script randomly fails or the ZIP file is not complete,
' just increase to more than 2 seconds
wScript.Sleep 2000

আমি এটিতে ফাঁকা স্থান সহ পাথ এবং ফাইলের নামের জন্য পরীক্ষা করিনি n't কমান্ড লাইনের পরামিতিগুলির চারপাশে উদ্ধৃতি স্থাপন করা হলে এটি কাজ করতে পারে।


এটি কিভাবে কাজ করে: উইন্ডোজ (? উইন্ডোজ এক্সপি এবং পরে) এ বিল্ট-ইন জিপ কার্যকারিতা মাধ্যমে প্রকাশিত এর COM উইন্ডোজ শেল থেকে ইন্টারফেস, EXPLORER.EXE - যে "Shell.Application" অংশ। এই সিএমএম ইন্টারফেসটি একটি ভিবিএস স্ক্রিপ্ট স্ক্রিপ্ট থেকে ব্যবহার করা যেতে পারে কারণ এই জাতীয় স্ক্রিপ্ট COM উপাদানগুলিতে অ্যাক্সেস করতে পারে। স্ক্রিপ্টটিকে পুরোপুরি স্ব-অন্তর্নিহিত করতে এটি শুরু করার জন্য একটি খালি জিপ ফাইল তৈরি করে (ভিবিএস স্ক্রিপ্টের পাশাপাশি এটি একটি খালি জিপ ফাইলও তৈরি করতে পারে এবং লক্ষ্য সিস্টেমে এটি অনুলিপি করতে পারে)।

উইন্ডোজ 98 এর পর থেকে মাইক্রোসফ্ট উইন্ডোজের প্রতিটি ডেস্কটপ রিলিজে ডিবিএসক্রমে ভিবিএস স্ক্রিপ্ট ইনস্টল করা হয়েছে।

CScript.exeউইন্ডোজ স্ক্রিপ্ট হোস্টের অংশ । উইন্ডোজ স্ক্রিপ্ট হোস্টটি উইন্ডোজ 98 এবং উইন্ডোজের পরবর্তী সংস্করণগুলিতে ডিফল্টরূপে বিতরণ এবং ইনস্টল করা হয়। ইন্টারনেট এক্সপ্লোরার 5 (বা পরবর্তী সংস্করণ) ইনস্টল করা থাকলে এটি ইনস্টল করাও হয়।


1
+1 ভাল সমাধান যা "জাস্ট রান" করবে তবে আমি তালিকাভুক্ত না হওয়ার জন্য আরও বেশ কয়েকটি কারণে বিএটিএটি বেছে নিই। সুতরাং আমি একটি বিএটি সমাধান পছন্দ করব।
অ্যারন বুশ

4
অ্যারন বুশ: এই স্ক্রিপ্টটি এবং বিনার উভয়ই একটি কমান্ড সরবরাহ করে যা অনুরোধ অনুসারে উইন্ডোজ বিল্টিন ফাংশনগুলি ব্যবহার করে কমান্ডলাইনে একটি ফাইল জিপ করে। আপনি এই আদেশটি অন্য যে কোনও ব্যাচফাইলে যুক্ত করতে পারেন।
কোয়াকোট কোয়েসোট

মনে রাখবেন যে পাস করা পথগুলি পরস্পর হতে হবে, আপেক্ষিক নয়। আমাকে এখানে উত্তরের কৌশলগুলিও ব্যবহার করতে হয়েছিল: stackoverflow.com/q/1645843/99640
চক উইলবার


এটি উত্তর হিসাবে নির্বাচন করা উচিত।
মার্শালের ডিউক שלום

12

আপনি যদি পাওয়ারশেল ব্যবহারের জন্য উন্মুক্ত হন তবে জিপ ক্ষমতাগুলি .NET 2.0 এ পাওয়া যায় (পাওয়ারশেলটি। নেট)। এখানে মাইক হডনিকের কাছে একটি উদাহরণ ( উত্স ) ক্রেডিট :

########################################################
# out-zip.ps1
#
# Usage:
#    To zip up some files:
#       ls c:\source\*.txt | out-zip c:\target\archive.zip $_
#
#    To zip up a folder:
#       gi c:\source | out-zip c:\target\archive.zip $_
########################################################

$path = $args[0]
$files = $input

if (-not $path.EndsWith('.zip')) {$path += '.zip'} 

if (-not (test-path $path)) { 
  set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 

$ZipFile = (new-object -com shell.application).NameSpace($path) 
$files | foreach {$zipfile.CopyHere($_.fullname)}

এটি মূলত অন্যান্য উত্তরের সিএসক্রিপ্ট কোডের মতো একই জিনিস। নেই। নেট বৈশিষ্ট্য ব্যবহার করা হয় না (এবং .NET- এ যাইহোক জিপ সমর্থন নেই)। আমি সন্দেহ করি এটি সময় সংক্রান্ত বিষয়ে সংবেদনশীলও হতে পারে।
রবার্ট

2
.NET System.IO.Compression.ZipFile ক্লাসটি 4.5 সংস্করণে যুক্ত করা হয়েছিল।
কংক্রিট গণেট

7

সংক্ষিপ্তসার ডায়ালগ উইন্ডোটির অস্তিত্বের জন্য ভোটদানের মাধ্যমে আপনি সংকোচনকালীন সময় নির্ধারণের ঝুঁকি দূর করতে পারেন। এই পদ্ধতিটি ব্যবহারকারীকে সংকোচনের উইন্ডো থেকে বাতিল করার বিষয়টি পরিচালনা করে।

objShell.NameSpace(ZipFile).CopyHere(source)

' Wait for compression window to open
set scriptShell = CreateObject("Wscript.Shell")
Do While scriptShell.AppActivate("Compressing...") = FALSE   
   WScript.Sleep 500 ' Arbitrary polling delay
Loop  

' Wait for compression to complete before exiting script
Do While scriptShell.AppActivate("Compressing...") = TRUE   
   WScript.Sleep 500 ' Arbitrary polling delay
Loop

1
+1 টি। এই কোড বানর-স্টাইল " .Sleep(whatever)" আমাকে অসুস্থ করে তুলেছে।
ivan_pozdeev

1
আমি অপেক্ষা জন্য উপরের যুক্তি দিয়ে একটি vbs চলমান করছি, তাহলে কিভাবে এই একটি নির্ধারিত কাজের মাধ্যমে চালু করা হচ্ছে পরিচালিত হবে (যেখানে কোনো ব্যবহারকারী শারীরিকভাবে লগ ইন থাকলেও।)
ওয়েস

5

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

Microsoft (R) File Compression Utility  Version 5.00.2134.1
Copyright (C) Microsoft Corp. 1990-1999.  All rights reserved.

Compresses one or more files.

COMPRESS [-r] [-d] [-z] Source Destination
COMPRESS -r [-d] [-z] Source [Destination]

  -r            Rename compressed files.
  -d            Update compressed files only if out of date.
  -zx           LZX compression.
  -z            MS-ZIP compression.
  -zq[n]        Quantum compression and optional level
                (in range 1-7, default is 4).
  Source        Source file specification.  Wildcards may be used.
  Destination   Destination file | path specification.
                Destination may be a directory.
                If Source is multiple files and -r is not specified,
                Destination must be a directory.

3
+1 আসলে জিনিসগুলিকে সমাধান করে না তবে এটি সম্পর্কে এখনও জেনে রাখা ভাল।
অ্যারন বুশ

3
'Keep script waiting until compression is done
Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count
    WScript.Sleep 200
Loop

ঠিক আমি যা খুঁজছিলাম তা .. তবে এটি আমাকে "খালি জিপ ফাইলে হারিয়ে যাওয়া" একটি ত্রুটি দেয়
সোল

কোনও কারণে এটি কখনই বৃদ্ধি পায় না, যদি আমি objShell.NameSpace( ZipFile ).Items.Countলুপের ভিতরে প্রিন্ট করি তবে এটি সর্বদা 0 থাকে যদিও জিপ ফাইলটি তৈরি হয় এবং এর ভিতরে প্রত্যাশিত সামগ্রী থাকে ...
থম নিকোলস

2

সরলিকৃত কোড সহ একাধিক ফাইল / ডিরেক্টরি।

cscript zip.vbs target.zip sourceFile1 sourceDir2 ... sourceObjN

zip.vbs ফাইল

Set objArgs = WScript.Arguments
ZipFile = objArgs(0)

' Create empty ZIP file and open for adding
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set zip = CreateObject("Shell.Application").NameSpace(ZipFile)

' Add all files/directories to the .zip file
For i = 1 To objArgs.count-1
  zip.CopyHere(objArgs(i))
  WScript.Sleep 10000 'REQUIRED!! (Depending on file/dir size)
Next

2

এটি গৃহীত উত্তরের একটি রূপান্তর। আমি একসাথে কয়েক হাজার ফাইল পর্যন্ত এক টন অটোমেশন কাজ করি, তাই আমি কেবল 2 সেকেন্ডের জন্য ঘুমাতে পারি না এবং এটির যত্ন নিচ্ছি না। আমি কার্যসংক্রান্ত উত্পন্ন এখানে , যা Jiri Kočara এর উত্তর অনুরূপ এখানে

এটি প্রতি 200 মিমি গন্তব্য ফোল্ডারটি পিন করবে, যা মাইক্রোসফ্ট এফএস আপডেটগুলি পরীক্ষা করতে বলেছে প্রায় তত দ্রুত।

Set parameters = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
SourceDir = FS.GetAbsolutePathName(parameters(0))
ZipFile = FS.GetAbsolutePathName(parameters(1))
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set shell = CreateObject("Shell.Application")
Set source_objects = shell.NameSpace(SourceDir).Items
Set ZipDest = shell.NameSpace(ZipFile)
Count=ZipDest.Items().Count
shell.NameSpace(ZipFile).CopyHere(source_objects)
Do While Count = ZipDest.Items().Count
    wScript.Sleep 200
Loop

1

সংক্ষিপ্তকরণ এবং সঙ্কোচনের জন্য অন্তর্নির্মিত ক্ষমতাগুলি উইন্ডোগুলি সংক্ষিপ্ত করার জন্য এখানে আমার প্রচেষ্টা - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -সঙ্গে-ব্যাচ-F

কয়েকটি প্রদত্ত সমাধান যা প্রায় প্রতিটি উইন্ডোজ মেশিনে কাজ করা উচিত।

হিসাবে শুভেচ্ছা shell.application এবং WSH আমি পছন্দ JScript যেমন একটি সংকর ব্যাচ / JScript ফাইল (.bat এক্সটেনশন সহ) অনুমতি দেয় files.I've প্লাস আরো কয়েকটি বৈশিষ্ট্য এক ফাইলে আনজিপ এবং পিন ক্ষমতা করা টেম্প প্রয়োজন হয় না ।


0

উইন্ডোজ 8 বা উইন্ডোজ সার্ভার 2012 এ আপনার কাছে পাওয়ারশেল এবং .NET 4.5 থাকবে যাতে আপনি এটি করতে পারেন:

zip.ps1 (ব্যবহার -directory <directory to zip up> -name <zip name>:):

param (
    [string]$directory,
    [string]$name
)

Add-Type -Assembly System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($directory, $name, [System.IO.Compression.CompressionLevel]::Optimal, $false)

zip.bat (যদি আপনার জন্য পাওয়ারশেলকে কল করতে কোনও সহায়ক দরকার হয় তবে ডিরেক্টরিটি প্রথম যুক্তি এবং পিনের নাম দ্বিতীয়):

@Echo Off
powershell -ExecutionPolicy ByPass -Command "& '%~dpn0.ps1' -directory '%1' -name '%2'"

0

উইন্ডোজ 10 বিল্ড 17063 বা তারপরে tar.exe দিয়ে বান্ডিল করা হয়েছে যা কমান্ড লাইন থেকে জিপ নিয়ে কাজ করতে সক্ষম।

tar.exe -xf archive.zip

বা সংরক্ষণাগার তৈরি করতে

tar.exe -cf Test.zip Test

-5

উইন্ডোজ কমান্ড লাইনটি এখন কমপ্যাক্ট কমান্ড সরবরাহ করে যা আমি যতদূর বলতে পারি উইন্ডোজের স্থানীয়। যদি আমি কিছু মিস না করি তবে অনুরোধ করা প্রয়োজনীয়তাগুলি পূরণ করা উচিত।


9
compactএক্সপি থেকে অস্তিত্ব রয়েছে এবং এটি এনটিএফএস সংকোচনের ব্যবস্থা করার একটি সরঞ্জাম
ডের হচস্টাপলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.