व्यक्तिगत जिप फ़ाइलों के रूप में फ़ाइलों को ज़िप करने के लिए बैच फ़ाइल का उपयोग करना


10

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

दुर्भाग्य से मैंने उस कोड को खो दिया जो ऐसा करता था, और अब मैं इसके साथ फंस गया हूं जो कुछ भी करने के लिए प्रतीत नहीं होता है।

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

मैं चाहता हूं कि प्रत्येक फ़ाइल का अपना ज़िप संग्रह हो, और ज़िप संग्रह के लिए फ़ाइल का नाम साझा करने के लिए, पाठ्यक्रम का विस्तार शून्य से हो।

कोई भी मदद बहुत ही सराहनीय होगी।


इसके अलावा अगर विंडोज 10 पर बिल्टइन जिप फीचर का उपयोग करने का एक आसान तरीका है जो ठीक भी होगा।
माइक वान डंक

जवाबों:


4

मैं चाहता हूं कि प्रत्येक फ़ाइल का अपना ज़िप संग्रह हो, और ज़िप संग्रह के लिए फ़ाइल का नाम साझा करने के लिए, पाठ्यक्रम का विस्तार घटा।

बैच स्क्रिप्ट

(स्रोत और गंतव्य को पूर्ण स्पष्ट फ़ोल्डर पथ ऊपर सेट करें और फिर बस आवश्यकतानुसार चलाएं। स्रोत वह जगह है जहाँ फ़ाइलें मौजूद हैं आप ज़िप करना चाहते हैं और गंतव्य वह जगह है जहाँ आप चाहते हैं कि उन्हें ज़िप किया गया हो।)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

कमांड लाइन

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

आगे के संसाधन


4

आपकी मूल लिपि निम्नलिखित करती है, लाइन बाय लाइन:

@echo on

उन्हें निष्पादित करने से पहले बैच फ़ाइल में प्रत्येक कमांड को वापस प्रिंट करने के लिए कमांड प्रॉम्प्ट बताता है। यह सिर्फ इतना है कि आप "देख" सकते हैं कि यह वास्तव में क्या कर रहा है इससे पहले कि यह करता है।

cd "C:\Users\MVD21\Desktop\test"

सी hanges डी मैं क्या आशा है कि पथ जहाँ आप सभी फ़ाइलें ज़िप करना चाहते है में irectory।

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

INयहाँ के लिए पैरामीटर है (C:\Users\MVD21\Desktop\test)। यह लूप "बॉडी" (कीवर्ड के पीछे की कार्रवाई DO) को ठीक एक बार निष्पादित करने का कारण होगा , %iपैरामीटर के साथ मान असाइन किया गया है C:\Users\MVD21\Desktop\test। यह कोई आश्चर्य की बात नहीं है कि यह वह नहीं करता है जो आप चाहते हैं! ऐसा लगता है कि यह पूरी निर्देशिका को एकल .7z फ़ाइल में बदल देगा।

अगर यह कुछ नहीं करता है , तो शायद यह है क्योंकि यह का रास्ता नहीं मिल सकता है 7z.exe। यदि वह फ़ाइल वर्तमान निर्देशिका में नहीं है (जो कि testऊपर उल्लिखित निर्देशिका है), तो उसे PATH( %PATH%पर्यावरण चर में; echo %PATH%यह देखने के लिए खोलना होगा; जो वर्तमान में सेट है)। अन्यथा आपको 7z.exeवर्तमान निर्देशिका को कॉपी करना होगा या जहां स्थित है (जैसे, उदाहरण के लिए, "C:\Program Files\7-zip\7z.exe" ...) के लिए एक पूर्ण पथ निर्दिष्ट करना होगा ।

pause

जब स्क्रिप्ट समाप्त हो जाती है, तो यह कीवर्ड सिर्फ शेल को बताता है कि आपको तुरंत बाहर निकलने के बजाय कमांड प्रॉम्प्ट को दर्ज करने या बंद करने के लिए इंतजार करना होगा।


जब आप एक बैच स्क्रिप्ट (या, वास्तव में, कुछ और जो कोड के साथ काम करता है) का निर्माण कर रहे हैं, तो आपको पूरी स्क्रिप्ट को एक अखंड कॉपी-पेस्ट के रूप में मानना ​​बंद कर देना चाहिए, जिसे आप नहीं समझते हैं (और समझने के बजाय) उप-भागों में समस्या जिसे आप व्यक्तिगत रूप से समझ सकते हैं, फिर उन्हें एक साथ जोड़ सकते हैं। यह आपको स्वतंत्र रूप से समस्याओं को हल करने और किसी और को आपके लिए अपना काम करने के लिए कहने के बजाय समाधान बनाने में सक्षम करेगा । मैं इसकी पुरजोर सलाह देता हूँ।

आपके मामले में, आपकी समस्या के निम्नलिखित उप-घटक हैं:

  1. दिए गए निर्देशिका के भीतर निहित प्रत्येक फ़ाइल पर ओवररेट (लूप के माध्यम से)।
  2. प्रत्येक दिए गए फ़ाइल के लिए, 7zउपयोगिता को लागू करके इसे .7z फ़ाइल में डालें ।

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

यह प्रश्न, 'बैच स्क्रिप्ट में डायरेक्टरी की प्रत्येक फ़ाइल के लिए कुछ कैसे करें' आपकी समस्या का आधा हल करती है।

उत्तर का जोर यह है कि आप बस उस StackOverflow उत्तर से इस भाग से शुरू करते हैं:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

और उस भाग को बदलें जहाँ वह कुछ कर रहा है ( echo %%f) जो आप करना चाहते हैं । मुझे पता है कि आपको उस भाग को बदलने की आवश्यकता है, क्योंकि मैंने स्क्रिप्ट के पाठ का विश्लेषण किया है और समझा है कि प्रत्येक वर्ण और पैरामीटर का क्या मतलब है, इसलिए मैं इस बारे में तर्क कर सकता हूं कि मैं अपना कोड कहां डालना चाहता हूं।

यहाँ कुछ "एयर कोड" (अप्रकाशित!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

@echo onऔर pauseऊपर दिए गए कथन, अच्छा अभ्यास कर रहे हैं ताकि आप उन्हें में छोड़ सकते हैं। और आप शायद उस रखना चाहेंगे cdबयान भी, आपकी फ़ाइलों कि पथ में स्थित हैं यदि।

तो यह हमें क्या छोड़ता है?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

यदि आप "यह काम नहीं करता है!" के साथ उत्तर देते हैं, तो मैं आपकी मदद नहीं करूंगा। आप इस कोशिश करते हैं और यह काम नहीं, तो आप होता है, तो चाहिए मुझे टिप्पणी में निम्नलिखित जानकारी बताओ:

  • जब आप इन आदेशों को चलाते हैं या बैच फ़ाइल में डालते हैं और उन्हें चलाते हैं, तो कमांड प्रॉम्प्ट में आपको क्या सटीक त्रुटि संदेश मिलता है? संक्षिप्त मत करो; आउटपुट को सीधे कॉपी और पेस्ट करें ( यदि यह बहुत है तो http://pastebin.com पर डालें )।
  • आपको क्या लगता है कि त्रुटि संदेश आपको बता रहा है कि समस्या क्या है?
  • आपका 7-ज़िप इंस्टॉलेशन (फ़ाइल पथ) कहाँ स्थित है?
  • क्या आपकी 7-ज़िप इंस्टॉलेशन की फाइल लोकेशन PATHपर्यावरण चर की सामग्री में शामिल है ? (यह जाँच करें, जैसा कि ऊपर बताया गया है, echo %PATH%एक cmdसंकेत में।)

मुझे नहीं लगता कि यह काम कर रहा है क्योंकि मेरे पास 7zip दूसरे ड्राइव पर स्थापित है? यह काम करने लगता है अगर मैं मूल जवाब के रूप में सीडी "7zip का स्थान" करता हूं। बेशक जो केवल "कभी-कभी" काम कर रहा है। यह तब तक काम कर रहा था जब तक कि मैं इसके तहत एक और इको स्टेटमेंट नहीं डाल देता। और हाँ मैं बैच फ़ाइलों के बारे में अधिक समझने की कोशिश कर रहा हूँ। मैं बैच कमांडों की एक शब्दावली खोजने की कोशिश कर रहा हूं या क्या नहीं अध्ययन करने के लिए इसलिए मैं वास्तव में इसे समझता हूं। मुझे विश्वास है कि मैं बल्कि समझता हूँ और यह काम किया है की तुलना में यह काम है।
माइक वान डंक

मैंने आपके समाधान की कोशिश की और मैं आपको यह नहीं बता सकता कि आउटपुट क्या है क्योंकि बैच फ़ाइल बिल्कुल भी नहीं चलती है। यह केवल चमकती हुई cmd विंडो के साथ खुलता है और फिर बंद हो जाता है। हां मुझे वहां विराम देना है। मेरे पास मेरे स्थानीय ड्राइव पर और द्वितीयक आंतरिक ड्राइव पर 7zip स्थापित है, लेकिन यह पथ पर्यावरण का हिस्सा नहीं दिखता है
माइक वान डंक

मैं वास्तव में समझना चाहूंगा लेकिन Google को खोजने से बहुत मदद नहीं मिल रही है। उदाहरण के लिए, मुझे नहीं पता कि "" dir / b "कमांड या पैरामीटर क्या है या यह क्या कर रहा है। मुझे पता है कि स्पष्ट रूप से एक निर्देशिका है, लेकिन मुझे नहीं पता / b क्या है। किसी को यह समझाने के लिए कि मैं क्या कर रहा हूं, पैरामीटर क्या कर रहे हैं ताकि मैं बेहतर समझ पाऊं। या अगर किसी के पास किसी ऐसी साइट का लिंक है, जहां वे इस तरह से जाते हैं, जो मददगार होगा। मैं एक बैच फ़ाइल में 'dir / b' गया और वास्तव में कुछ भी नहीं पा सका। मुझे लगता है कि / b का फ़ाइल नामों के साथ कुछ है लेकिन मैं अनिश्चित हूं।
माइक वान डंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.