मैं विंडोज 7 पर बैच फ़ाइल के माध्यम से निर्देशिका पेड़ों को कैसे हटाऊं?


36

मैं बैच फ़ाइल के माध्यम से विंडोज 7 पर एक निर्दिष्ट फ़ोल्डर की पूरी सामग्री को हटाना चाहता हूं। मेरी समस्या यह है कि 'डेल' या 'इरेज़' केवल फाइल्स को डिलीट करता है, फोल्डर को नहीं और 'rmdir' या 'rd' हमेशा अपने कंटेंट के साथ निर्दिष्ट फोल्डर को डिलीट करता है, लेकिन मैं केवल कंटेंट को डिलीट करना चाहता हूं, फोल्डर को नहीं। । मैंने कमांड की कोशिश की ' rmdir /S /Q "C:\Share\*"' जिसने मुझे एक सिंटैक्स त्रुटि दी।

ऐसा करने का सही तरीका क्या है?

मैं विंडोज 7 प्रोफेशनल 64-बिट पर काम कर रहा हूं और इसमें एडमिन की परमिशन है।

जवाबों:


36

आपकी बैच फ़ाइल को दो कमांड को चलाने की आवश्यकता होगी, एक को फाइल को हटाने के लिए फिर एक को चाइल्ड डायरेक्टरी को हटाने के लिए। मैंने उस निर्देशिका को मान लिया है जिसे आप हटाना चाहते हैंC:\Share\

बैच फ़ाइल कुछ इस तरह दिखना चाहिए:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q पुष्टिकरण के लिए संकेत दिए बिना किसी भी फ़ाइल (यहां तक ​​कि केवल फ़ाइलों को पढ़ने) को हटाने वाली निर्देशिका ट्री के माध्यम से पुन: खोज करेगा।

दूसरी पंक्ति सभी उप निर्देशिकाओं के माध्यम से लूप करती है (जो अब खाली होनी चाहिए) और उन्हें हटा देती है।

संपूर्ण फ़ोल्डर को हटाने और इसे फिर से बनाने के लिए लघु (जो मुझे नहीं लगता कि आप अनुमतियों के कारण करना चाहते हैं?) यह फ़ोल्डर को साफ करने का सबसे आसान तरीका होना चाहिए।


अगर मैं यहाँ "/ f %% f" -> "for / f% f" के लिए थोड़ा सुधार करता हूँ तो यह ठीक काम करता है :) बहुत बहुत धन्यवाद।
माइकल के

6
delइसकी आवश्यकता नही है। rd/s/qफ़ाइलों और सबफ़ोल्डर्स को हटा देगा।
१६:११

1
@grawity delमुख्य रूप से रूट फोल्डर की किसी भी फाइल के लिए है, हालांकि रिकर्सन स्विच को हटा सकता है।
विंडोस

5
@MichaelK, %% f बैच फ़ाइलों में उपयोग के लिए है,% f जब यह कमांड लाइन पर सीधे एक कमांड के लिए है।
विंडोस

1
यदि किसी उपनिर्देशिका के नाम में रिक्त स्थान हैं, तो आप उन्हें सही ढंग से संसाधित करने के लिए "delims =" जोड़ सकते हैं (for / f "delims =" %% f in ...): देखें stackoverflow.com/q/5553040/64918
GoldPudo

27
rmdir /s/q C:\Share

आपको एक "सिंटैक्स त्रुटि" मिलती है क्योंकि rmdirकेवल पूर्ण नाम स्वीकार करता है, वाइल्डकार्ड नहीं। ( cmd.exeवाइल्डकार्ड विस्तार को व्यक्तिगत कार्यक्रमों के लिए छोड़ दिया जाता है; इन सभी को नहीं।)

यदि आपके पास कई निर्देशिकाएं हैं Share..., तो forलूप का उपयोग करें ।

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
मैं शेयर फ़ोल्डर को हटाना नहीं चाहता।
माइकल के


2

व्हाट अबाउट ?

rmdir /S /Q "target"
mkdir "target

EDIT: बेशक यह समाधान तभी लागू होता है जब आप एक क्षणिक फ़ोल्डर की अनुपस्थिति को सहन कर सकते हैं।


यह मूल फ़ोल्डर को हटा देगा।
माइकल के

@MichaelK मेरा कार्य एक क्षणिक फ़ोल्डर की अनुपस्थिति को सहन करने में सक्षम था, इसलिए मैं इस समाधान के साथ गया। मैंने सोचा, कि यह for /fमेरे जैसे मामलों की तुलना में सरल और अधिक पठनीय है । बस साझा करना चाहते थे
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

यह काम नहीं करता है यदि उपनिर्देशिका में अन्य निर्देशिकाएं होती हैं जिनमें रिक्त स्थान होते हैं।

इस काम को करने के लिए, मुझे इस तरह अंतिम स्ट्रिंग को उद्धृत करने की आवश्यकता थी

for / f "delims =" %% f in ('dir / ad / bc: \ share \') do rd / s / q "c: \ share \ %% f"

जाहिरा तौर पर, यह कमांड को केवल स्ट्रिंग के बजाय उद्धृत स्ट्रिंग पर काम करने का कारण बनता है।


0

मैं इस फ़ोल्डर में कोशिश करूँगा जहाँ सभी सबफ़ोल्डर्स को हटा दिया जाना चाहिए, लेकिन रूट (और रूट में फ़ाइलें) वे इस प्रकार हैं: / डी% v में (*) के लिए rd / s / q% v

/ D, निर्देशिका और rd / s / q से मेल खाता है, एक बार में प्रत्येक को हटा देता है


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