मैं इस फ़ोल्डर की उपनिर्देशिकाओं में सभी अभिलेखागार कैसे निकालूं?


18

मैं एक फ़ोल्डर में उपनिर्देशिका में निहित कई अभिलेखागार कैसे निकालूं, परिणाम को वापस फ़ोल्डर में संग्रहीत कर रहा हूं जहां अभिलेखागार हैं।

जवाबों:


22

सबसे पहले, 7-ज़िप स्थापित करें ।

batनिर्देशिका की जड़ में एक फ़ाइल बनाएँ जिसमें अभिलेखागार के अंदर कई उपनिर्देशिकाएँ हों। फिर निम्नलिखित को चिपकाएँ:

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
)

बैट लॉन्च करें, और सभी rar / zips को उस फ़ोल्डर में निकाला जाएगा जो वे इसमें निहित हैं।

यह कैसे काम करता है?

के लिए / डी / आर%% एफ में ("*") डीओ (

लूप के लिए वर्तमान निर्देशिका में सभी फ़ोल्डरों के माध्यम से लूप के लिए, और पथ को एक चर में डालें %%F

पुशड% CD%

वर्तमान निर्देशिका है कि हम स्मृति में हैं डाल दिया।

सीडी %% एफ

%%Fवर्तमान निर्देशिका के रूप में चर से फ़ोल्डर सेट करें ।

FOR %%X in (*.rar *.zip) DO (

वर्तमान फ़ोल्डर में सभी rarऔर zipफ़ाइलों के लिए, करें:

"C:\Program Files\7-zip\7z.exe" x "%%X"

फ़ाइलों पर 7-ज़िप चलाएँ। उद्धरण की आवश्यकता होती है %%Xक्योंकि कुछ फ़ाइल नामों में रिक्त स्थान होते हैं।

popd

पिछली निर्देशिका पर लौटें जिसे हमने पहले मेमोरी में संग्रहीत किया था।

आशा है कि यह किसी के लिए उपयोगी है।


3

मुझे विंडोज़ विस्टा से स्क्रिप्ट चलाने में समस्या थी। जब मैंने कोड चलाया तो कुछ भी नहीं हुआ। मुझे स्क्रिप्ट चलाने में सक्षम होने के लिए व्यवस्थापक होने की आवश्यकता थी। जब मैंने सही .bat फ़ाइल पर क्लिक किया और "व्यवस्थापक के रूप में चला" तो यह काम नहीं किया क्योंकि यह किसी कारण से सिस्टम 32 फ़ोल्डर में शुरू हुआ (यदि मुझे सही याद है)। इसे हल करने के लिए बस विंडोज पर्यावरण चर का उपयोग करें (यहाँ समझाया गया: विंडोज पर्यावरण चर )% ~ dp0 जिस स्क्रिप्ट से चलाया गया था उस निर्देशिका में वापस जाने के लिए।

@echo on
cd %~dp0

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
)

सुनिश्चित करें कि कोई * .rar या * .zip फ़ाइलें स्क्रिप्ट के समान स्तर पर हैं। उन्हें एक स्तर नीचे होना चाहिए।

मुझे उम्मीद है कि इस टिप्पणी से किसी को मदद मिली।


इसने मेरे लिए ठीक काम किया। मुझे "C: \ Program Files" से "C: \ Program Files (x86)" का रास्ता बदलना था क्योंकि मैं 64-बिट विन 7 चला रहा हूं।
कॉन्टैंगो

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

वर्तमान निर्देशिका में एक पुनरावर्ती खोज शुरू करता है, .zip में समाप्त होने वाली सभी फ़ाइलों को पाता है, फिर एक लूप में पाइप करता है। इसे खोजने वाली हर फ़ाइल के लिए, यह फ़ाइल पर एक अनज़िप कमांड चलाता है जिसमें आउटपुट को फ़ाइल की डायरेक्टरी में शंट किया जाता है।


1

काम के ऊपर उत्तर, हालांकि, यदि आप चल रहे हैं Windows 64-bitऔर 7-Zip 32-bit, सही रास्ता C:\Program Files (x86)\7-Zip7-ज़िप के लिए है। नीचे स्क्रिप्ट है जो मेरे लिए काम करती है।

@echo on
cd %~dp0

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

यदि आपके पास 7zip का 64-बिट संस्करण है, तो सही रास्ता है: "C: \ Program Files \ 7-zip \ 7z.exe" जैसा कि मूल उत्तर में बताया गया है।
रोहण एडम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.