यह कुल कमांडर से आंतरिक ज़िप पैकर है:
हालाँकि मैं अपने 7zip पैकर का उपयोग करना चाहता हूँ। जब मैं 5 फ़ाइलों का चयन करता हूं, तो मुझे प्रत्येक चयनित फ़ाइल के लिए 5 अलग-अलग .zip अभिलेखागार मिलते हैं। मैं इसे 7zip में कैसे करूँ?
यह कुल कमांडर से आंतरिक ज़िप पैकर है:
हालाँकि मैं अपने 7zip पैकर का उपयोग करना चाहता हूँ। जब मैं 5 फ़ाइलों का चयन करता हूं, तो मुझे प्रत्येक चयनित फ़ाइल के लिए 5 अलग-अलग .zip अभिलेखागार मिलते हैं। मैं इसे 7zip में कैसे करूँ?
जवाबों:
मुझे यकीन नहीं है कि आप वह कर सकते हैं जो आप ग्राफिकल यूजर इंटरफेस का उपयोग करने का सुझाव दे रहे हैं, लेकिन आप निश्चित रूप से कमांड लाइन से कर सकते हैं:
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"
मुझे गोयुक्स का जवाब पसंद है। हालाँकि, यदि आप विंडोज 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 }
इसमें केवल वे फ़ाइलें शामिल होंगी जो:
संपादित करें यदि आप 7-ज़िप फ़ाइलों के बजाय ज़िप फ़ाइलें चाहते हैं, तो इसके बजाय InfoZip के zip.exe का उपयोग करें।
7z a -tzip archive.zip *.exe
आप http://www.ghisler.com/plugins.htm से कुल कमांडर के लिए 7zip प्लगइन डाउनलोड और स्थापित कर सकते हैं । एक बार जब आप ऐसा करते हैं तो आपके स्क्रीनशॉट से विंडो के दाईं ओर 7zip संपीड़न के लिए एक और चयन होगा। उस विकल्प के साथ आप वही कर सकते हैं जो आप पूछ रहे हैं।
मैं सिर्फ इस समस्या पर काम कर रहा हूं और मुझे जो समस्याएँ मिलीं उनमें से एक संग्रह के भीतर फ़ोल्डर के नाम का दोहराव था, अर्थात जब "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" जैसे बैच फ़ाइल में कॉपी किया जाना चाहिए और उस निर्देशिका से व्यवस्थापक के रूप में चलाएं जिसमें आपके द्वारा संक्षिप्त किए जाने वाले फ़ोल्डर हैं।
उम्मीद है की यह मदद करेगा।
यदि आपको फ़ोल्डर संरचना रखने की आवश्यकता है, और प्रत्येक फ़ाइल को अपनी संरचना में सहेजें, तो यह कोशिश करें:
एक्सटेंशन के साथ इस कमांड को एक फाइल में सेव करें .bat और उस फ़ोल्डर में रखें जिसे आपको ज़िप करने की आवश्यकता है:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
ध्यान दें:
-ddel: मूल फ़ाइल को हटाता है (वैकल्पिक, यदि आप केवल संपीड़ित फ़ाइल रखना चाहते हैं)