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