कमांड लाइन का उपयोग करके विंडोज में एक फ़ोल्डर को पूरी तरह से हटा दें


57

मुझे अंदर एक फ़ोल्डर को हटाने की जरूरत है जिसमें अन्य फ़ोल्डर और फाइलें हैं। मैंने कोशिश की delऔर rmdirआज्ञा दी लेकिन कभी-कभी वे कुछ त्रुटि लाइनों के साथ विफल हो जाते हैं:[PATH]: The directory isn't empty.

क्या कोई अच्छा विकल्प है?


मैंने असंगतता का अनुभव किया है कि क्या उचित झंडे वाली rddir एक निर्देशिका पेड़ (और / या स्वयं पेड़) में सब कुछ हटा देती है, और मेरे पास एकमात्र संभावित स्पष्टीकरण है जो हैरी जॉनसन कहते हैं।
r_alex_hall

जवाबों:


15

यह मेरी स्वचालित बिल्ड स्क्रिप्ट के साथ बहुत कुछ होता है।

मुझे लगता है कि कारण कुछ एप्लिकेशन हो सकता है जिसमें "शेयर डिलीट" के साथ उस निर्देशिका में एक फ़ाइल खुली हो। Ie अनुप्रयोग फ़ाइल को हटाने की अनुमति देता है (यही कारण है कि मैं हटाता हूँ कि कॉल DeleteFile कॉल विफल नहीं होती है), लेकिन फ़ाइल केवल गायब हो जाएगी क्योंकि आवेदन बंद हो गया है।

इसका मतलब है कि फ़ाइल तब भी हो सकती है जब rmdirकमांड फ़ोल्डर को हटाने की कोशिश करता है, इसलिए त्रुटि संदेश। इसके तुरंत बाद, कहा गया कि एप्लिकेशन इसे बंद कर देगा, फ़ाइल गायब हो जाएगी, और जब आप फ़ोल्डर का निरीक्षण rmdirकरेंगे तो यह देखने के लिए कि कौन सी फ़ाइल के बारे में बात कर रहा था वह खाली हो जाएगा।

कम से कम मेरा सिद्धांत तो यही है।

हैरी जॉनसन द्वारा प्रस्तावित वर्कअराउंड अच्छा दिखता है। केवल मैं rmdirआदेशों के बीच एक विराम सम्मिलित करूंगा । बेशक विंडोज में आसानी से स्क्रिप्ट करने योग्य "पॉज़" कमांड नहीं है (सुधार: प्राचीन विंडोज संस्करण नहीं हैं, नए हैं - टिप्पणियां देखें)। लेकिन अगर सेकंड ग्रैन्युलैरिटी पर्याप्त है तो pingएक पॉज़ बनाने के लिए उपयोग किया जा सकता है :

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

तो कुल में:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

मेरे अनुभव में, एक ठहराव कभी आवश्यक नहीं है, लेकिन YMMV। (बेशक, अगर वास्तव में कोई अन्य अनुप्रयोग है, तो इसे पहचानना बेहतर है और यदि संभव हो तो इसे बाहर निकलने के लिए प्रतीक्षा करना बेहतर है।)
हैरी जॉनसन

खैर ... मैंने प्रति सेकंड एक सेकंड की देरी के साथ 10x रिट्री-लूप लागू किया। अब काम करता है। मैं विराम को हटाने की कोशिश नहीं करने जा रहा हूं, केवल यह देखने के लिए कि वह फिर से विफल है :-) निश्चित रूप से इसका मतलब यह नहीं है कि यह आवश्यक नहीं है। बस अतिरिक्त सतर्क रहना।
पॉल ग्रूके

2
OT: यही कारण है कि मुझे खिड़कियों से नफरत है। सब कुछ इतना कठिन है। rm -rf /directory/सभी ऑपरेटिंग सिस्टम पर वैश्विक होना चाहिए।

2
वास्तव में एक "विराम" प्रकार का आदेश है; तीन सेकंड रुकने के लिए आप इसका उपयोग कर सकते हैं:timeout /t 3
r_alex_hall

@r_alex_hall वास्तव में (लेकिन मूल रूप से केवल विस्टा से ही, XP और पहले के पास pauseकमांड नहीं है )।
misha256

57

प्रयत्न, कोशिश:

rmdir /S your_directory

या:

rmdir /S /Q your_directory 

पुष्टिकरण संदेशों को छोड़ने के लिए।


1
मैंने पहले से ही इन विकल्पों की कोशिश की, लेकिन जैसा कि मैंने लिखा है delऔर rmdirकुछ भी नहीं पूछता है, वे वर्णन में एक की तरह कुछ पंक्तियां भेजते हैं।
फ्रांसेस्को ज़ानिनी

2
rmdir /sहटाने के लिए संभव है कि कुछ भी हटा देगा। आपके पास एक प्रोग्राम द्वारा लॉक की गई फाइलें, केवल पढ़ने वाली फाइलें या फाइलें हैं जिन्हें हटाने के लिए आपको प्रशासनिक पहुंच की आवश्यकता होती है। वहाँ एक भी आदेश नहीं है जो आपके लिए उन सभी स्थितियों का ध्यान
रखेगा

यदि आपको अभी भी त्रुटि संदेश मिलता है, तो PowerShell के साथ प्रयास करें: cmdlet निकालें-आइटम यह rmdir की तुलना में थोड़ा शक्तिशाली है।
एंड्रयू क्यू

1
rmdir / S <निर्देशिका> निर्देशिका और सबफ़ोल्डर और निर्देशिकाओं को हटा रहा है। यह भी पूछता है कि क्या आप निश्चित हैं। विंडोज पर 10. धन्यवाद
जसमीत

1
@r_alex_hall RMDIR / s वास्तव में निर्देशिकाओं में फ़ाइलों को हटाता है। लेकिन DEL / s केवल फ़ाइलों को हटा देगा और निर्देशिकाओं को बनाए रखेगा, यही कारण है कि RMDIR बेहतर विकल्प है
JCH2k

11

आपके पास कुछ आसानी से फाइलें हो सकती हैं, आप इनका उपयोग करके छुटकारा पाने के लिए डेल / एफ विकल्प का उपयोग कर सकते हैं

     del /S /F your_directory
     rmdir your_directory

आपके पास कुछ छिपी हुई फाइलें भी हो सकती हैं और यदि आप वास्तव में सुनिश्चित हैं कि आप उन्हें हटाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं

     del /S /F /AH your_directory
     rmdir your_directory

यदि यह अभी भी विफल रहता है, तो या तो आपके पास कुछ फ़ाइलों को हटाने की अनुमति नहीं है, या कुछ फाइलें अभी भी उपयोग में हैं।


यह सही उत्तर होना चाहिए!
jdhao

4

मेरा मानना ​​है कि विंडोज 7 (और शायद अन्य संस्करणों) में एक बग है जो कभी-कभी इस लक्षण का कारण बनता है; या यह थर्ड-पार्टी सॉफ्टवेयर में बग हो सकता है। (क्या आपके पास किसी भी अवसर पर सिमेंटेक एंडपॉइंट सुरक्षा स्थापित है?)

वैसे भी, मैं इसे काफी बार चला चुका हूं। ज्यादातर मामलों में, समस्या को rd /s /qलगातार दो या तीन बार चलाकर काम किया जा सकता है ।

यदि यह एक बैच फ़ाइल में है, तो आप कुछ इस तरह से कर सकते हैं:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

माना। Rd / s foo का उपयोग करना - जो कि / q साइलेंट विकल्प के बिना है - आपके लिए सभी उप फ़ोल्डरों को हटा देगा, लेकिन आपको Y को प्रॉम्प्ट पर उत्तर देना होगा, इसलिए बैच फ़ाइलों को उपस्थित होना होगा। आदर्श से कम मुझे पता है।
एंथनी

3

delअंदर फ़ाइलों पर उपयोग करें , फिर rmdirफ़ोल्डर को हटाने के लिए।

rmdirसभी फ़ाइलों को हटाने के लिए विधि का उपयोग करने के लिए , निर्देशिका नाम से पहले/S स्विच का उपयोग करें, और हटाने के लिए संकेत दबाने के लिए। यह ऐसा करने का सबसे अच्छा तरीका है, क्योंकि आप किसी भी फाइल को याद नहीं करते हैं। हालांकि / Q स्विच का उपयोग करने में सावधानी बरतें, क्योंकि यह आपको सिस्टम या हिडन फाइल विशेषताओं से आगाह नहीं करेगा/Q


2

यदि आप नोड का उपयोग करते हैं तो आप इस तरह से रिमरफ निर्भरता का उपयोग कर सकते हैं :

इंस्टॉल इंस्टॉल करें: npm install rimraf -g

फोल्डर हटा दें: rimraf SourceFolder

त्रुटि मिलने पर इससे मुझे मदद मिली:

स्रोत फ़ाइल नाम फ़ाइल सिस्टम द्वारा समर्थित से बड़ा है


0

विंडोज के पुराने संस्करण (डॉस, विंडोज 95/98 / ME), या DELTREEके बराबर है । मैं अपने Windows 7 वर्कस्टेशन पर बैच फ़ाइलों में उपयोग करता हूं, हालांकि ठीक है।RMRMDIRDELTREE

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

मुझे लगता है कि आप इसे इस तरह से उपयोग कर सकते हैं:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
SU में आपका स्वागत है! मैं क्यों नीचा दिखा? 1) खराब स्वरूपण 2) वही आवश्यक समाधान प्रदान करता है, जो कई साल पहले ही पोस्ट किया गया था (हमेशा एक नया पोस्ट करने से पहले पोस्ट किए गए समाधान पढ़ें! 3) प्रश्न के लिए फिट नहीं है (आपका समाधान हटाए गए फ़ोल्डर को फिर से बनाता है, जो मांगा नहीं गया था)।
ज़गरिम्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.