मैं 7zip में प्रत्येक चयनित फ़ाइल / निर्देशिका के लिए अलग ज़िप फाइलें कैसे बनाऊं?


30

यह कुल कमांडर से आंतरिक ज़िप पैकर है:

कुल कमांडर जिप पैकर संवाद बॉक्स की एक तस्वीर।

हालाँकि मैं अपने 7zip पैकर का उपयोग करना चाहता हूँ। जब मैं 5 फ़ाइलों का चयन करता हूं, तो मुझे प्रत्येक चयनित फ़ाइल के लिए 5 अलग-अलग .zip अभिलेखागार मिलते हैं। मैं इसे 7zip में कैसे करूँ?

जवाबों:


54

मुझे यकीन नहीं है कि आप वह कर सकते हैं जो आप ग्राफिकल यूजर इंटरफेस का उपयोग करने का सुझाव दे रहे हैं, लेकिन आप निश्चित रूप से कमांड लाइन से कर सकते हैं:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

आपको निर्देशिका (ए) बदलने की आवश्यकता होगी cd कमांड) कोF:\Downloads , या जो भी निर्देशिका आप जन संपीड़न करना चाहते हैं। इसके अलावा, * .exe या जो भी एक्सटेंशन आप केवल उन दस्तावेज़ों को संपीड़ित करने के लिए फ़िल्टर करना चाहते हैं में स्थानापन्न करना आसान है।

और गुप्त डिकोडर रिंग:

  • %i एक चर है जो लूप में प्रत्येक चरण के लिए फ़ाइल नाम रखता है
  • (*.*) चयन मानदंड है, यह आसानी से * .exe या समान हो सकता है
  • 7z.exe 7-ज़िप का कमांड लाइन संस्करण है
  • %~ni - यह% i चर को केवल फ़ाइल नाम तक विस्तारित करता है - कोई विस्तार नहीं

यदि आप किसी दिए गए निर्देशिका के लिए फ़ोल्डर्स जोड़ना चाहते हैं, तो कमांड फाइलों के साथ काम करने के लिए डिफ़ॉल्ट रूप से थोड़ा अधिक जटिल है। हमें इसे कुछ अतिरिक्त जानकारी खिलाने की आवश्यकता है:

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

यह जादू की तरह प्रतीत होने वाले कुछ टुकड़ों के कारण काम करता है:

  • /F () में विस्तारित मूल्य पर पुनरावृति के लिए कहता है ()
  • usebackq इसके लिए कहता है कि मैं एक कमांड पास करने जा रहा हूं और आउटपुट को इट्रेट का उपयोग करने जा रहा हूं
  • delims=? के लिए कहता है कि मैं इसके अलावा टोकन तोड़ना चाहता हूं ? - फ़ाइल नामों और निर्देशिकाओं में एक अवैध चरित्र। मुझे केवल एक टोकन चाहिए।
  • /Bमें DIRके लिए है नंगे प्रारूप - बस नाम
  • /A:Dमें DIRविशेषता के आधार पर परिणाम प्रतिबंधित करने के लिए है, डी निर्देशिकाओं के लिए है

यदि आप इसे एक बैच फ़ाइल के अंदर इनकैप्सुलेट करना चाहते हैं, तो आपको केवल वही परिवर्तन करना होगा जो% i वैरिएबल से बचने के लिए है:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"

हाँ, आपके अलावा 7z संग्रह है, मुझे एक ज़िप संग्रह चाहिए! तो% ~ ni.zip इसके बजाय?
ग्रम्पी राजभाषा 'भालू

बेहतर अभी तक, मैं अल्ट्रा संपीड़न के साथ ज़िप या 7z चाहता हूं। और इसे d: \ पैक में पैक करें। लेकिन अभी तक आपका तरीका काम करता है!
ग्रम्पी राजभाषा 'भालू

1
समझ गया। धन्यवाद! % I में ( ) DO 7z.exe a "i: \ पैक \% ~ ni.7z" "% i" -mx9
क्रोधी राजभाषा 'भालू

वैसे, क्या आप मुझे दिखा सकते हैं कि बैच फ़ाइल में कैसे करें? यानी स्प्रैड-आर्काइव.बैट
ग्रम्पी राजभाषा 'भालू

धन्यवाद, और मैं उस स्क्रिप्ट में संपूर्ण फ़ोल्डर कैसे जोड़ूं, कृपया?
ग्रम्पी राजभाषा 'भालू

15

मुझे गोयुक्स का जवाब पसंद है। हालाँकि, यदि आप विंडोज 7 का उपयोग कर रहे हैं (या पावर शेल स्थापित है) और 7-ज़िप, 7za.exe के कमांड-लाइन संस्करण का भी उपयोग करें, तो आप इस कमांड को चला सकते हैं:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

आप केवल निष्पादन योग्य फ़ाइलों का चयन करने के लिए "dir" को "dir * .exe" में भी बदल सकते हैं।

पावर शेल के बारे में एक अच्छी बात यह है कि आप तार के बजाय वस्तुओं के साथ काम कर रहे हैं। यदि आप चाहते थे तो आप वास्तव में विशिष्ट हो सकते हैं। उदाहरण के लिए:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

इसमें केवल वे फ़ाइलें शामिल होंगी जो:

  1. एक सीएसवी एक्सटेंशन है
  2. आकार में 18,900 से कम बाइट
  3. अंतिम बार 7/1/2011 को संशोधित किया गया

संपादित करें यदि आप 7-ज़िप फ़ाइलों के बजाय ज़िप फ़ाइलें चाहते हैं, तो इसके बजाय InfoZip के zip.exe का उपयोग करें।


4
7-ज़िप भी ज़िप फाइल बना सकता है - -t झंडा पर एक नज़र है। उदाहरण:7z a -tzip archive.zip *.exe
गोयूइक्स

ठीक है, $ _। बेसनेम $ _। नाम काम करता है, लेकिन मैं $ _ कैसे करूँ। बेसनेम $ _। एक अन्य ड्राइव पर नाम, किसी अन्य निर्देशिका में? च कहो: \ test \ file1.7z आदि
क्रोधी राजभाषा 'भालू

0

आप http://www.ghisler.com/plugins.htm से कुल कमांडर के लिए 7zip प्लगइन डाउनलोड और स्थापित कर सकते हैं एक बार जब आप ऐसा करते हैं तो आपके स्क्रीनशॉट से विंडो के दाईं ओर 7zip संपीड़न के लिए एक और चयन होगा। उस विकल्प के साथ आप वही कर सकते हैं जो आप पूछ रहे हैं।


0

मैं सिर्फ इस समस्या पर काम कर रहा हूं और मुझे जो समस्याएँ मिलीं उनमें से एक संग्रह के भीतर फ़ोल्डर के नाम का दोहराव था, अर्थात जब "foo" नामक फ़ोल्डर को संपीड़ित किया जाता है तो एक संग्रह जिसमें .\foo\fighters.txtकेवल एक युक्त होता हैfighters.txt

इसलिए उत्तर को संसाधित की जा रही निर्देशिका में जाना है और संग्रह को पिछली (रूट) निर्देशिका में दिखाई देना है, फिर अगले फ़ोल्डर को संसाधित करने के लिए उस निर्देशिका में वापस लौटें।

यह भी महत्वपूर्ण है कि 7ZIP के पास मौजूदा जिप और सीएमडी फाइलों को रूट डाइरेक्टरी के भीतर अनदेखा करें, ताकि वे संग्रह के भीतर समाप्त न हों, इसलिए -x!*.zipऔर-x!*.cmd बहिष्कार तर्क।

यह स्क्रिप्ट पुनरावर्ती फ़ोल्डर संरचनाओं को भी बनाए रखेगा।

@echo off

REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal

if exist *.zip goto zip_exist

for /d %%X in (*) do (
    cls
    cd /D %%X
    "e:\Program Files\7-Zip\7z.exe" a -r  -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
    cd ..
)
goto end

:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.

:end
pause

उपरोक्त कोड को "compress_dirs.cmd" जैसे बैच फ़ाइल में कॉपी किया जाना चाहिए और उस निर्देशिका से व्यवस्थापक के रूप में चलाएं जिसमें आपके द्वारा संक्षिप्त किए जाने वाले फ़ोल्डर हैं।

उम्मीद है की यह मदद करेगा।


0

यदि आपको फ़ोल्डर संरचना रखने की आवश्यकता है, और प्रत्येक फ़ाइल को अपनी संरचना में सहेजें, तो यह कोशिश करें:

एक्सटेंशन के साथ इस कमांड को एक फाइल में सेव करें .bat और उस फ़ोल्डर में रखें जिसे आपको ज़िप करने की आवश्यकता है:

FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel

ध्यान दें:

-ddel: मूल फ़ाइल को हटाता है (वैकल्पिक, यदि आप केवल संपीड़ित फ़ाइल रखना चाहते हैं)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.