बैच फ़ाइल कैसे बनाएं जो `बिन` या` ओबज` नाम के सभी फ़ोल्डरों को पुनरावर्ती रूप से हटा दें?


31

मुझे अपने पीसी पर एक फ़ोल्डर में सभी binऔर objफ़ोल्डरों को हटाने की आवश्यकता है । इसलिए, मैं ऐसा करने के लिए एक बैच फ़ाइल के बारे में सोच रहा हूँ, लेकिन मैं विंडोज़ में बैचिंग फ़ाइल के साथ पारिवारिक नहीं हूँ। कृपया मदद करे।

[संपादित करें]

उपयोगकर्ता के साथ चर्चा के बाद DMA57361, मुझे वर्तमान समाधान मिला (अभी भी समस्या हो रही है, हमारी टिप्पणियाँ देखें):

.Bat फ़ाइल बनाएँ, और नीचे कमांड पेस्ट करें:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

या

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: जब मैं आपकी स्क्रिप्ट चलाता हूं, तो मुझे नीचे की त्रुटि मिलती है। कोई उपाय?

वैकल्पिक शब्द


@ नाम - आप क्यों भाग रहे हैं for \/d \/r ...- इसके बजाय डबल-स्लैश क्यों for /d /r ...? और /qअंत में "पूर्ण" संस्करण के साथ चल रहा है - जैसा कि मैंने कहा - चेतावनी के बिना सब कुछ हटा देता है इसलिए कोई आउटपुट नहीं देता है (यानी, यह आपको नहीं बताता है कि यह कब काम करता है, केवल जब यह एक त्रुटि है), क्या आप निश्चित रूप से दूसरे हैं ठीक से ऊपर काम नहीं किया?
DMA57361

@ यह रन भी समान नहीं है - छवि में आपकी कमांड शुरू होती है for / %d in और नहीं for /d /r . %d in- आपको नीचे पूरी कमांड का उपयोग करना है , प्रत्येक बिट में एक अलग फ़ंक्शन है और महत्वपूर्ण है।
DMA57361

@ नाम का विरोध, मेरी माफी, आप पूरी तरह से सही हैं, यह पहले कुछ स्विच नहीं छापता है! हालाँकि, यह उस त्रुटि को नहीं फेंकता है और मेरे लिए सही है। क्या आपने कमांड लाइन से कमांड चलाने की कोशिश की है, बजाय इसे एक बैच फ़ाइल के भीतर से चलाने की कोशिश करने के लिए?
DMA57361

हम्म, कितना अजीब है। संभवतः आपका Win7 मेरे WinXP की तुलना में बैच के साथ कुछ अलग कर रहा है, तो निश्चित नहीं है कि क्या। मैं आज शाम घर पर Win7 पर जांच कर पाऊंगा, नहीं तो मुझे डर है कि मैं इस समय फंस गया हूं ...
DMA57361

दरअसल, बैच कमांड के साथ उपसर्ग करने की कोशिश करें startऔर देखें कि क्या होता है। आदर्श नहीं है, लेकिन मुझे आश्चर्य है कि अगर मदद मिल सकती है।
DMA57361

जवाबों:


42

यह पहले स्टैक ओवरफ्लो पर जवाब दिया गया है , जहां से मैंने इस उत्तर का मुख्य जोर लिया है।

निम्न आदेश का प्रयास करें, आप इसे भीतर से चला सकते हैं cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

यदि आपको अन्य फ़ोल्डरों को बदलने की आवश्यकता है, तो बस (bin,obj)कमांड के बीच में सेट में नए आइटम जोड़ें ।

यह चेतावनी के बिना और रीसायकल बिन का उपयोग किए बिना मिलान किए गए सब कुछ को हटा देगा - इसलिए, यदि आप थोड़ी अतिरिक्त सुरक्षा चाहते हैं, तो /qकॉल से rdअंत में ड्रॉप करें , और सिस्टम को प्रत्येक विलोपन से पहले आपसे पूछना चाहिए।

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

यदि आप एक के भीतर से आदेश चलाना चाहते हैं बैच फ़ाइल , आप चर के प्रत्येक उदाहरण को बदलने के लिए की आवश्यकता होगी %dके साथ %%dइसलिए की तरह,:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

रूपांतरण के अनुसार प्रश्न टिप्पणियों में था

यदि कमांड बैच फ़ाइल में चलाने से इंकार करती है (यहाँ दोहराने में असमर्थ), तो कमांड को उपसर्ग करने की कोशिश करें start। यद्यपि यह बैच फ़ाइल के साथ समवर्ती चलाने के लिए प्रक्रिया शुरू करेगा, जो अन्य मुद्दों का कारण हो सकता है, यह सही ढंग से काम करने की अधिक संभावना है।

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


1
क्या आप जानते हैं कि मैं इस रूट फ़ोल्डर के भीतर एक फ़ोल्डर को कैसे अनदेखा कर सकता हूं, जहां मैं यह कमांड चला रहा हूं?
गोरान ओब्राडोविक

पूरी तरह से काम किया! धन्यवाद! +1
khr055


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