एक .bat फ़ाइल या डॉस कमांड के साथ एक निर्देशिका (incl। सबफ़ोल्डर) में सभी ज़िप निकालें


6

मैं एक फ़ोल्डर और उसके बच्चों में सभी .zip's .rars निकालना चाहता हूं

संरचना इस प्रकार है:

MAIN_FOLDER
    -A folder
        - a.zip
            -a.rar
    -B folder
        - b.zip
            -b.rar
    -C folder
        ....    
            ...

मैंने पहले से ही यह कोशिश की, जो काम नहीं किया

FOR /D /r %%F in ("*") DO (

  pushd %CD%
 cd %%F
    FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x %%X
    )
 popd

)

मैं विंडोज का उपयोग करता हूं और 7-जिप स्थापित है।

अतिरिक्त प्रश्न: क्या पिछले बच्चों (a.rar, b.rar) की सभी निकाली गई फ़ाइलों को एक और एक ही फ़ोल्डर (मुख्य फ़ोल्डर) में सहेजना संभव होगा?

जवाबों:


12

लिपी:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (
    "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)

स्पष्टीकरण:

for /F %%I IN ('dir /b /s *.zip *.rar') DO (

यह कमांड द्वारा लौटी प्रत्येक फ़ाइल के लिए लूप करता है dir /b /s *.zip *.rar/sबताता है dirउपनिर्देशिका और में recurse करने /bनंगे प्रारूप में प्रिंट।

फ़ाइल नाम को %%Iबाद में उपयोग के लिए चर में संग्रहीत किया जाता है । यदि आप इसे प्रॉम्प्ट पर टाइप कर रहे हैं, तो आप %Iइसके बजाय उपयोग करेंगे ।

"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"

यह निष्कर्षण करता है। तर्क -o"%%~dpI"फ़ाइल को उसी निर्देशिका में निकालता है जहाँ संग्रह रहता है। अन्य विकल्प:

  • -o"%%~dpI" - निर्देशिका में अर्क जहां संग्रह रहता है।

  • -o"%%~dpnI"- संग्रह के नाम पर पदानुक्रम में एक नई निर्देशिका बनाता है और वहां अर्क (जो कि AFolder\archive.zipअर्क है AFolder\archive\)।

  • -o"%%~nI"- वर्तमान निर्देशिका में संग्रह के नाम पर एक नई निर्देशिका बनाता है और वहां अर्क (जो कि AFolder\archive.zipअर्क है .\archive\)।

  • -oतर्क छोड़ें - वर्तमान निर्देशिका में अर्क।

उदाहरण:

C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.zip
    │
    ├───BFolder
    │       b.zip
    │
    └───CFolder
            c.zip



C:\Temp>batch.bat > nul


C:\Temp>tree /F

    Folder PATH listing
    Volume serial number is 08A4-22E0
    C:.
    │   batch.bat
    │
    ├───AFolder
    │       a.zip
    │       a.zip.txt
    │
    ├───BFolder
    │       b.zip
    │       b.zip.txt
    │
    └───CFolder
            c.zip
            c.zip.txt

बहुत बढ़िया जवाब! मैंने कभी देखा है सबसे अच्छे में से एक। पूरी तरह से, अभी तक स्पष्ट रूप से और संक्षिप्त रूप से समझाया गया है। शानदार कार्य!
कोसो

क्या स्क्रिप्ट का विस्तार करना कठिन होगा, इसलिए मैं सभी फ़ोल्डरों को निकालने के लिए एक हार्ड कोडित मार्ग भी जोड़ सकता हूं? तो वर्तमान स्थान में निकालने के बजाय, एक नए फ़ोल्डर पथ पर निकालें?
ऑस्टिन

@ मेरे पास अभी इसकी पहुंच नहीं है, लेकिन 7-ज़िप एक उत्कृष्ट सहायता फ़ाइल के साथ आता है। वहाँ सब कुछ के लिए एक खंड है 7-ज़िप कमांड लाइन से कर सकते हैं, और मैं शर्त लगा सकता हूँ कि आप क्या चाहते हैं।
स्टीफन जेनिंग्स

2
ध्यान दें कि यदि निर्देशिका या फ़ाइल नाम में स्थान या टैब है तो यह काम नहीं करेगा। उन लोगों के साथ काम करने के लिए, आपको टोकन सीमांकक के रूप में हटाने के लिए विकल्प "delims =" निर्दिष्ट करना होगा।
सोचा

1

मुझे विश्वास है कि आप देख रहे हैं आदेश :forfiles

  • forfiles /s /m *.zip /c "7z x @file"

  • forfiles /s /m *.rar /c "7z x @file"


आपकी टिप के लिए धन्यवाद। यह इरादा की तरह काम नहीं करता है। क्षमा करें, मैं डॉस कमांड में वह फर्म नहीं हूं। क्या किसी को वर्किंग कोड लिखने का मन होगा? thx और वैसे भी मेरी क्रिसमस :)
ईमेल

1
क्या आपने इसके बजाय शक्तियों का उपयोग करने पर विचार किया है? एक लंबा-एक लाइनर होना चाहिए।
जिम बी

2
@ ईमेल (1) आप क्या त्रुटि प्राप्त कर रहे हैं? यह कहते हुए कि "यह काम नहीं करता है" बिना विस्तार के रचनात्मक नहीं है, और "किसी को काम कोड लिखने का मन होगा?" अपमानजनक है। (२)% PATH% में 2z.exe का प्रोग्राम डायरेक्टरी है?
माइल्स एरिकसन

1

मैं सिर्फ सालों पहले से ही स्वीप का उपयोग करता हूं । यह वर्तमान निर्देशिका और सभी उपनिर्देशिकाओं में एक ही कमांड चलाता है।

यदि आप किसी संग्रह के भीतर अभिलेखागार निकालना चाहते हैं तो आपको एक से अधिक बार स्वीप चलाना पड़ सकता है।

आप कुछ का उपयोग कर सकते हैं जैसे:

sweep 7za x -y *.zip

सभी .zip फ़ाइलों को वर्तमान फ़ोल्डर में और सभी फ़ोल्डरों के नीचे खोलने के लिए।

7zip कमांड लाइन संस्करण यहाँ है: http://www.7-zip.org/download.html


1

यह रिक्त स्थान ("DELIMS =") के साथ फ़ाइल नाम का समर्थन करने के लिए स्वीकृत उत्तर का एक अद्यतन है और ओवरराइट (-ओओएस) छोड़ें। नीचे दिए गए लिंक और अद्यतन कोड देखें। धन्यवाद

एक .bat फ़ाइल या डॉस कमांड https://stackoverflow.com/questions/12487491/how-to-handle-space-of-filename-in-batch-for-loop के साथ एक निर्देशिका (incl। सबफ़ोल्डर) में सभी ज़िप निकालें। http://7zip.bugaco.com/7zip/MANUAL/switches/overwrite.htm

for /F "DELIMS=" %%I IN ('dir /b /s *.zip *.rar') DO (
    "H:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpI" "%%I"
)

for / F "DELIMS =" %% I IN ('dir / b / s * .zip * .rar') DO ("C: \ Program Files \ 7-Zip \ 7z.exe" x -aos -o "% % ~ dpI "" %% I ")
acruns

0
7z e -an -air!*.rar -r

वर्तमान निर्देशिका के उप फ़ोल्डर (पुनरावृत्ति) से सभी rar फ़ाइलों को वर्तमान फ़ोल्डर में निकालता है। -Air बदलें! *! ज़िप फ़ाइलों के लिए ज़िप।


0
@echo off

FOR /R %%g IN (.) DO TITLE Extracting from %%~ng & "%~dp07z.exe" x -aou "%%g\*.rar" -o"%%g" & "%~dp07z.exe" & CLS

उसे एक टेक्स्ट फ़ाइल में कॉपी करें और उसका नाम बदलकर उसे extract.batअन्य फ़ोल्डर वाले पैरेंट फ़ोल्डर में संग्रह के साथ रखें। फ़ाइल 7z.exeके समान फ़ोल्डर में रखें extract.bat, या ऊपर दिए गए कमांड में पथ को संशोधित करके अपने स्थापित स्थान को प्रतिबिंबित करें 7z.exe। यह प्रत्येक सबफ़ोल्डर में RAR के समान सबफ़ोल्डर में सभी RAR को निकालता है। यह कोई "घर की सफाई" (मेरी प्रेमिका की तरह) नहीं करता है ...

*.rarअपनी आवश्यकताओं को फिट करने के लिए समायोजित करें ।

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