Windows में कमांड प्रॉम्प्ट पर किसी विशिष्ट निर्देशिका में फ़ाइलों / सबफ़ोल्डरों को कैसे हटाएं


308

कहते हैं, एक चर कहा जाता है %pathtofolder%, क्योंकि यह स्पष्ट करता है कि यह एक फ़ोल्डर का पूर्ण पथ है।

मैं इस निर्देशिका में हर एक फ़ाइल और सबफ़ोल्डर को हटाना चाहता हूं, लेकिन निर्देशिका को ही नहीं।

लेकिन, 'यह फ़ाइल / फ़ोल्डर पहले से उपयोग में है' जैसी कोई त्रुटि हो सकती है ... जब ऐसा होता है, तो इसे जारी रखना चाहिए और उस फ़ाइल / फ़ोल्डर को छोड़ देना चाहिए।

क्या इसके लिए कुछ आज्ञा है?



यह समझ में आता है कि विंडोज़ फ़ोल्डर को हटाना कितना मुश्किल है ... या एक ऐसा बना जो डॉट से शुरू होता है ... विंडोज में बैश एकीकरण के लिए भगवान का शुक्र है! rm -rf path\to\folderविंडोज 10 में काम करता है (या गिट बैश से आ सकता है ... किसी भी तरह से अगर आपके पास है कि यह एक कोशिश है!)
Stijn de Wit

जवाबों:


256

आप C:\Temp स्रोत के भीतर फ़ोल्डर और फ़ाइलों को साफ करने के लिए इस शेल स्क्रिप्ट का उपयोग कर सकते हैं :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

उपरोक्त कमांड वाले एक बैच फ़ाइल (कहते हैं, delete.bat) बनाएँ। उस स्थान पर जाएं जहां delete.bat फ़ाइल स्थित है और फिर कमांड चलाएँ: delete.bat


20
मैंने इसे आजमाया लेकिन दुर्भाग्य से ऐसी फाइलें जहां डिलीट नहीं की गईं, केवल सब-फोल्डर ही डिलीट हुए। उदाहरण के लिए मेरे पास एक फ़ोल्डर है जिसका नाम टेस्ट है। इसमें 2 फ़ोल्डर शामिल हैं, जिनका नाम "रिपन" और "वसीम" है और इसमें "riponalwasim.tw" नाम की एक फ़ाइल है। सबफ़ोल्डर्स रिपन और वसीम को हटा दिया गया था लेकिन riponalwasim.txt को हटाया नहीं गया था।
रिपन अल वसीम

16
यदि आप कमांड लाइन से सीधे भागना चाहते हैं, तो एकल प्रतिशत चिह्न का उपयोग करें%p
एलेक्स

2
दुख की बात है कि यह 2 लाइनों लेता है, लेकिन कम से कम यह काम करता है! मैं एक काम करने वाले "वन-लाइनर" की तलाश में थक गया हूं और इस एक के साथ जाऊंगा, धन्यवाद!
नाइटकॉडर

2
आप '&&' संचालक का उपयोग बिना किसी बैट फाइल के एक लाइन में दो कमांड निष्पादित करने के लिए कर सकते हैं ('%%' के बजाय सिंगल '%' नोटिस करें)। del / s / q "myfolder *" && for / D% p IN ("myfolder *") DO rmdir "% p" / s / q
ravinsp

</ F "डेलिम्स =" %% मैं ('dir / b / a-d') करते हैं (echo del "%% i" / q)> फ़ाइलों के लिए मदद कर सकता है (बस उस गूंज को हटा दें)
grenix

340

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

RMDIR "FOLDERNAME" /S /Q

यह चुपचाप फ़ोल्डर और सभी फ़ाइलों और सबफ़ोल्डर्स को हटा देता है।


65
ऐसा लगता है कि जिस ओपी को रखना चाहते थे, वह पाथफॉल्डर हटा देगा।
फज इवांस

4
यह फ़ोल्डर को स्वयं हटा देगा, इसलिए आपको एक और कमांड जोड़ने की आवश्यकता होगी: md FOLDERNAME(नीचे @rakoczyn से उत्तर देखें)।
थुदान

4
यहाँ "बैकअप बनाया गया है" से आपका क्या तात्पर्य है? मैं ऐसा कुछ भी नहीं देख सकता जो किसी भी तरह का बैकअप बनाए ...
पॉल ग्रूप

1
निर्देशिका खाली नहीं है संदेश प्रतिक्रिया के रूप में आया!
जमशेद कामरान

10
फ़ोल्डर को स्वयं हटाने के लिए नहीं, इसे पहले की वर्तमान निर्देशिका बनाएं, फिर "" का उपयोग करें। FOLDERNAME के ​​रूप में। बाद में इसे दोबारा बनाना वैसा ही नहीं है क्योंकि ACL खो सकता है। cd "FOLDERNAME" RD . /S /Q
मोरिट्ज़ दोनों

85

सबसे सरल समाधान जिसके बारे में मैं सोच सकता हूं, पूरी निर्देशिका को हटा रहा है

RD /S /Q folderPath

फिर इस निर्देशिका को फिर से बनाना:

MD folderPath

5
क्या होगा यदि आप हटाने के लिए अनुमति देते हैं लेकिन नए फ़ोल्डर नहीं बना रहे हैं ?? मुझे आशा है कि यह संभव है :)
सैंडी

13
यह एक बुरा समाधान है, क्योंकि यह निर्देशिका नोड के लिए फ़ाइल सिस्टम पर एक दौड़ का परिचय देता है, अर्थात तुरंत बाद निष्पादित होने पर दूसरा कमांड विफल हो सकता है।
रोक स्ट्रनिसा

22
इसके अलावा, खराब समाधान यदि निर्देशिका की विशेष अनुमति है तो आपने अहम (व्हूप्स) को बंद कर दिया है
अमर ब्लू

प्रतिक्रिया के साथ मत छोड़ो: 'निर्देशिका खाली नहीं है।', बस दो बार आदेश जारी करें :-)
कीरन रयान

1
आरडी और आरएमडीआईआर एक ही कमांड हैं और जब से आपने 9 महीने बाद किसी को एक ही जवाब दिया है, तो लोग आपको पॉइंट क्यों दे रहे हैं?
स्विच करें

51

यह फ़ोल्डर्स और फ़ाइलों को हटा देगा और फ़ोल्डर को पीछे छोड़ देगा।

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

4
किसी को भी इस दृष्टिकोण के बारे में निश्चित नहीं है: यह निश्चित रूप से निर्देशिका को फिर से नहीं बनाता है। इसके बिना 2>nul, यह "फ़ाइल को एक्सेस नहीं कर सकता क्योंकि यह किसी अन्य प्रक्रिया द्वारा उपयोग किया जा रहा है।"
रोक स्ट्रनिसा

6
मुझे नफरत है कि विंडोज कुछ प्रोग्राम द्वारा उपयोग की जा रही फ़ाइलों और फ़ोल्डरों को हटा नहीं सकता है। और मुझे लगता है कि आपने इस एक-लाइनर में अपने पक्ष में उपयोग किया है।
andref

तो यह uber- जादू है कि हम विंडोज में एक फ़ोल्डर कैसे खाली करते हैं ?? प्रभावशाली :)
mlvljr

3
@mlvljr यदि आप मूल फ़ोल्डर भी रखना चाहते हैं। RD /?आपको एक फ़ोल्डर खाली करने का सरल तरीका दिखाएगा।
foxidrive

1
यह अच्छा है यदि आपको अपने शुरुआती स्थान पर वापस आने की आवश्यकता है, अन्यथा बस CD mypath && RD /S .पर्याप्त होगा। मुझे यह पसंद नहीं है कि आपको अपना रास्ता दो बार दोहराना पड़े, हालांकि लंबे रास्तों के लिए इसे पढ़ना मुश्किल हो जाता है। इसलिए मैं set p="mypath"शुरुआत में इसे जोड़ूंगा।
अमित नायडू

39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... दी गई निर्देशिका के नीचे सभी फ़ाइलों और फ़ोल्डरों को हटाता है, लेकिन स्वयं निर्देशिका नहीं।


4
यह सही उत्तर होना चाहिए .. बस सरल बनायें .. डिलीट करेंमीफॉल्डर कॉन्टेंट्स।बीएटी फ़ाइल .. अपने रास्ते में पॉप और यह एक आकर्षण की तरह काम करता है ..
टाइमब्रोएन

3
डेल कमांड लाइन चूक विकल्प /Aभी छिपा विशेषता सेट के साथ फ़ाइलों को हटाना और %dir%\*तरह डबल उद्धरण में संलग्न किया जाना चाहिए "%dir%\*"एक अंतरिक्ष या इन पात्रों में से एक युक्त निर्देशिकाओं के लिए भी काम करने के लिए &()[]{}^=;!'+,`~। और के लिए कमांड लाइन करने के लिए संशोधित किया जाना चाहिए for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"की वजह से के लिए छिपा विशेषता सेट के साथ ध्यान न दी निर्देशिका। विकल्पों के साथ डीआईआर सभी निर्देशिकाओं को केवल उनके नाम के साथ /AD /Bआउटपुट करता है । BTW: dirएक पर्यावरण चर के लिए एक अच्छा नाम नहीं है।
मोफी

1
उप फ़ोल्डर को नहीं हटाता है
RMiranda

1
@ रिरिंडा, मेरे परीक्षणों में, यह ठीक वैसा ही है जैसा ओपी ने पूछा था। क्या आपके पास एक ऐसा मामला है जहां यह सबफ़ोल्डर्स को डिलीट नहीं करता है?
thepip3r

क्या यह उत्तर आवश्यकता को संबोधित करता है "कोई त्रुटि हो सकती है जैसे 'यह फ़ाइल / फ़ोल्डर पहले से ही उपयोग में है' ... जब ऐसा होता है, तो इसे जारी रखना चाहिए और उस फ़ाइल / फ़ोल्डर को छोड़ देना चाहिए।" ?
पीटर मोर्टेंसन

30
CD [Your_Folder]
RMDIR /S /Q .

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

अपडेट :

से इस उपयोगी टिप्पणी (करने के लिए धन्यवाद मोरित्ज़ दोनों ), आप जोड़ सकते हैं &&के बीच है, तो RMDIRनहीं चलेगा यदि CDआदेश विफल रहता है (जैसे गलत लिखे गए निर्देशिका का नाम):

CD [Your_Folder] && RMDIR /S /Q .

से विंडोज कमांड लाइन संदर्भ :

/ S: निर्देशिका ट्री (निर्दिष्ट निर्देशिका और उसके सभी उपनिर्देशिका, सभी फ़ाइलों सहित) को हटाता है।

/ Q: शांत मोड निर्दिष्ट करता है। निर्देशिका ट्री हटाते समय पुष्टि के लिए संकेत नहीं देता है। (ध्यान दें कि / q केवल तभी काम करता है जब / निर्दिष्ट किया गया हो।)


1
यह अस्थायी खाली करने के लिए एकदम सही है, लेकिन cd [Your_Folder]यह सुपर क्रिटिकल है - मुझे यह याद रखना होगा कि मैं डायरेक्टरी को डिलीट नहीं करता ...
ऋषि

5
यह सही उपाय है। &&लाइन ब्रेक के बजाय कमांड्स के बीच जोड़ें और आप एक असफल सीडी से सुरक्षित हैं।
मोरिट्ज़ दोनों

यह एक सरल एट सही समाधान है। यहां तक ​​कि एज़्योर कमांड शेल के साथ भी काम करता है!
फिलिप

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

यह पिछले चार उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

9

RD, REMOVE निर्देशिका के लिए है।

/ S: फ़ोल्डर के अलावा सभी फ़ाइलों और सबफ़ोल्डर्स को हटा दें। संपूर्ण फ़ोल्डर ट्री को निकालने के लिए इसका उपयोग करें।

/ Q: चुप - YN पुष्टि प्रदर्शित न करें

उदाहरण :

RD /S /Q C:/folder_path/here

1
केवल यह बताने के लिए कि क्या /Sऔर क्या /Qमतलब है के लिए
उत्थान किया गया

2
नहीं rdके बराबर है rmdirऔर निर्देशिका को स्वयं हटा देगा और वह नहीं है जो ओपी चाहता है।
पश्चिमीगंज

क्या यह उत्तर आवश्यकता को संबोधित करता है "कोई त्रुटि हो सकती है जैसे 'यह फ़ाइल / फ़ोल्डर पहले से ही उपयोग में है' ... जब ऐसा होता है, तो इसे जारी रखना चाहिए और उस फ़ाइल / फ़ोल्डर को छोड़ देना चाहिए।" उदाहरण के लिए, क्या यह जारी रखने के बजाय पूरी तरह से गर्भपात करता है?
पीटर मोर्टेंसन

8

मैं Powershell का उपयोग करें

Remove-Item c:\scripts\* -recurse

यह फ़ोल्डर की सामग्री को हटा देगा, न कि फ़ोल्डर को ही।


rhellem का उत्तर हाल ही में है, लेकिन यह एकमात्र उत्तर है जो वास्तव में मेरे लिए ऐसा करेगा। (जीत 8.1, पसंद से नहीं)
philologon

2
बैच कमांड लाइन से:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
रोसबर्ग लिन्हारेस

ध्यान दें कि "*" आवश्यक है या यह फ़ोल्डर को हटा देगा।
mhenry1384

7

2018-06-01 पर पोस्ट किए गए उत्तरों में से कोई भी , फॉक्सड्राइव द्वारा पोस्ट की गई एकल कमांड लाइन के अपवाद के साथ , वास्तव में सभी फ़ाइलों और सभी फ़ोल्डरों / निर्देशिकाओं को हटा दिया गया । यही कारण है कि एक फ़ोल्डर के सभी फ़ाइलों और सबफ़ोल्डरों को हटाने के लिए एक बहुत ही सरल सिंगल कमांड लाइन के साथ एक और उत्तर पोस्ट करने के लिए और साथ ही एक बैच फ़ाइल के साथ एक और अधिक जटिल समाधान बताते हुए कि अन्य सभी उत्तर 2018-06-01 को DEL का उपयोग करके पोस्ट क्यों किया गया और के लिए के साथ आरडी पूरी तरह से एक फ़ोल्डर को साफ करने में विफल रहा है।%PathToFolder%


सरल सिंगल कमांड लाइन समाधान जो निश्चित रूप से एक बैच फ़ाइल में भी उपयोग किया जा सकता है:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

इस कमांड लाइन में एक के बाद एक निष्पादित तीन कमांड होते हैं।

पहला आदेश PUSHD स्टैक पर वर्तमान निर्देशिका पथ को धकेलता है और अगला %PathToFolder%कमांड प्रक्रिया को चलाने के लिए वर्तमान निर्देशिका बनाता है।

यह UNC रास्तों के लिए भी डिफ़ॉल्ट रूप से कार्य करता है क्योंकि कमांड एक्सटेंशन डिफ़ॉल्ट रूप से सक्षम होते हैं और इस स्थिति में PUSHD एक अस्थायी ड्राइव अक्षर बनाता है जो उस निर्दिष्ट नेटवर्क संसाधन की ओर इशारा करता है और फिर नए परिभाषित ड्राइव अक्षर का उपयोग करके वर्तमान ड्राइव और निर्देशिका को बदलता है।

PUSHD STDERR को संभालने के लिए त्रुटि संदेश के बाद आउटपुट देता है यदि निर्दिष्ट निर्देशिका बिल्कुल मौजूद नहीं है:

सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता है।

इस त्रुटि संदेश 2>nulको डिवाइस NUL के साथ पुनर्निर्देशित करके दबा दिया जाता है ।

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

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

नहीं हटाए गए हैं:

  1. फ़ोल्डर किसी भी चालू प्रक्रिया के लिए वर्तमान निर्देशिका के रूप में उपयोग किया जाता है। यदि किसी फ़ोल्डर को किसी चालू प्रक्रिया के लिए वर्तमान निर्देशिका के रूप में उपयोग किया जाता है, तो ऐसे फ़ोल्डर का संपूर्ण ट्री ट्री डिलीट नहीं किया जा सकता है।

  2. वर्तमान में चल रही एप्लिकेशन / प्रक्रिया द्वारा खोले जाने पर फ़ाइल को हटाने की अनुमति देने के लिए फ़ाइल ओपन अनुमतियों के साथ किसी भी चल रही प्रक्रिया द्वारा खोली गई फाइलें। इस तरह की एक खुली हुई फाइल भी पूरे फ़ोल्डर ट्री को हटाए गए फ़ाइल को हटाने से रोकती है।

  3. फ़ाइलें / फ़ोल्डर जिस पर वर्तमान उपयोगकर्ता को फ़ाइल (फ़ोल्डर) को हटाने के लिए आवश्यक (NTFS) अनुमतियाँ नहीं हैं, जो इस फ़ाइल / फ़ोल्डर में फ़ोल्डर ट्री को हटाने से भी रोकता है।

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

प्रक्रिया फ़ाइल तक नहीं पहुँच सकती क्योंकि इसका उपयोग किसी अन्य प्रक्रिया द्वारा किया जा रहा है।

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

यह त्रुटि संदेश, अन्य सभी त्रुटि संदेशों की तरह, जो ऊपर लिखे गए तीन कारणों की वजह से हो सकता है, इसे STDERR से डिवाइस NUL2>nul तक हैंडल से रीडायरेक्ट करके दबाया जाता है।

तीसरी कमांड, POPD , कमांड RD के निकास मान से स्वतंत्र रूप से निष्पादित की जाती है ।

POPD स्टैक से PUSHD द्वारा धक्का दिया निर्देशिका पथ को पॉप करता है और इस निर्देशिका को कमांड प्रक्रिया को चलाने के लिए वर्तमान निर्देशिका को बदलता है, अर्थात प्रारंभिक वर्तमान निर्देशिका को पुनर्स्थापित करता है। POPD UNC फ़ोल्डर पथ के मामले में PUSHD द्वारा बनाए गए अस्थायी ड्राइव अक्षर को हटा देता है ।

नोट: POPD चुपचाप प्रारंभिक वर्तमान निर्देशिका को पुनर्स्थापित करने में विफल हो सकती है यदि प्रारंभिक वर्तमान निर्देशिका साफ़ करने के लिए निर्देशिका की उपनिर्देशिका थी जो अब मौजूद नहीं है। इस विशेष मामले %PathToFolder%में वर्तमान निर्देशिका बनी हुई है। इसलिए उपर्युक्त से अप्रत्यक्ष रूप से कमांड लाइन को चलाने की सलाह दी जाती है %PathToFolder%

एक और दिलचस्प तथ्य: मैंने कमांड लाइन C:\Tempको साझा नाम के साथ स्थानीय निर्देशिका को साझा Tempकरके UNC पथ का उपयोग करने की कोशिश की और विंडोज 7 पर \\%COMPUTERNAME%\Temp\CleanTestपर्यावरण चर को सौंपा UNC पथ का उपयोग कर रहा है PathToFolder। यदि कमांड लाइन चलाने पर वर्तमान निर्देशिका एक साझा स्थानीय का उपनिर्देशिका है UNC पथ का उपयोग करके एक्सेस किया गया फ़ोल्डर C:\Temp\CleanTest\Subfolder1, Subfolder1जिसे RD द्वारा हटा दिया गया है , और अगला POPDC:\Temp\CleanTest\Subfolder1 वर्तमान निर्देशिका को फिर से बनाने में चुपचाप विफल रहता है जिसके परिणामस्वरूपZ:\CleanTest चालू कमांड प्रक्रिया के लिए वर्तमान निर्देशिका शेष है। इसलिए इसमें बहुत खास मामला अस्थायी ड्राइव अक्षर का रहता है जब तक कि वर्तमान निर्देशिका को उदाहरण के लिए नहीं बदला जाताcd /D %SystemRoot%स्थानीय निर्देशिका में वास्तव में मौजूद है। दुर्भाग्यवश POPD0 से अधिक मूल्य के साथ बाहर नहीं निकलता है यदि यह प्रारंभिक वर्तमान निर्देशिका को पुनर्स्थापित करने में विफल रहता है, तो यह केवल पीओपीडी के निकास कोड का उपयोग करके इस बहुत ही विशेष त्रुटि स्थिति का पता लगाना असंभव है । हालांकि, यह माना जा सकता है कि कोई भी इस विशेष त्रुटि मामले में कभी नहीं चलता है क्योंकि आमतौर पर यूएनसी पथ स्थानीय फ़ाइलों और फ़ोल्डरों तक पहुंचने के लिए उपयोग नहीं किए जाते हैं।

उपयोग किए गए आदेशों को और भी बेहतर तरीके से समझने के लिए, कमांड प्रॉम्प्ट विंडो खोलें, वहां निम्नलिखित कमांड निष्पादित करें और प्रत्येक कमांड के लिए प्रदर्शित सहायता को बहुत सावधानी से पढ़ें।

  • pushd /?
  • popd /?
  • rd /?

विंडोज बैच फ़ाइल का उपयोग करने वाले कई कमांड के साथ सिंगल लाइन ऑपरेटरों को समझाता है &&और &यहां उपयोग किया जाता है।


अगला हमें बैच फ़ाइल समाधान आदेश का उपयोग पर नजर डालते हैं डेल में फ़ाइलों को हटाने के %PathToFolder%और के लिए और आरडी में उप-फ़ोल्डर को हटाने के लिए %PathToFolder%

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

बैच फ़ाइल पहले यह सुनिश्चित करती है कि पर्यावरण चर PathToFolderवास्तव में डबल उद्धरण के बिना और अंत में एक बैकस्लैश के बिना एक फ़ोल्डर पथ के साथ परिभाषित किया गया है। अंत में बैकस्लैश एक समस्या नहीं होगी, लेकिन एक फ़ोल्डर पथ में दोहरे उद्धरण समस्याग्रस्त हो सकते हैं क्योंकि PathToFolderबैच फ़ाइल निष्पादन के दौरान अन्य तारों के साथ समाप्‍त हो जाता है।

महत्वपूर्ण दो लाइनें हैं:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

आदेश डेल निर्दिष्ट निर्देशिका में सभी फ़ाइलों को हटाने के लिए किया जाता है।

  • विकल्प /Aवास्तव में सभी फाइलों को संसाधित करने के लिए आवश्यक है जिसमें छिपी विशेषता के साथ फाइलें शामिल हैं जो विकल्प का उपयोग किए बिना DEL को अनदेखा करेगा /A
  • विकल्प /Fकेवल-पढ़ने के लिए विशेषता सेट के साथ फ़ाइलों को हटाने के लिए आवश्यक है।
  • /Qयदि उपयोगकर्ता वास्तव में कई फ़ाइलों को हटा दिया जाना चाहिए, तो उपयोगकर्ता को संकेत दिए बिना कई फ़ाइलों को शांत हटाने के लिए विकल्प आवश्यक है।
  • >nulSTDOUT डिवाइस NUL को हैंडल करने के लिए लिखे गए फ़ाइल नामों के आउटपुट को पुनर्निर्देशित करना आवश्यक है, क्योंकि वर्तमान में किसी फ़ाइल को खोला नहीं जा सकता है या उपयोगकर्ता के पास फ़ाइल को हटाने की कोई अनुमति नहीं है।
  • 2>nul प्रत्येक फ़ाइल के लिए त्रुटि संदेश आउटपुट को पुनर्निर्देशित करना आवश्यक है जिसे हैंडल से हटाया नहीं जा सकता है STDERR से डिवाइस NUL

निर्दिष्ट निर्देशिका में सभी उपनिर्देशिकाओं को हटाने के लिए आदेश और RD का उपयोग किया जाता है। लेकिन for /Dवजह से नहीं किया जाता है के लिए छिपा विशेषता सेट के साथ इस मामले उपनिर्देशिका में अनदेखी कर रहा है। उस वजह सेfor /F लिए पृष्ठभूमि में शुरू की गई एक अलग कमांड प्रक्रिया में निम्न कमांड लाइन को चलाने के लिए उपयोग किया जाता है %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

DIR आउटपुट के /Bसाथ निर्देशिका प्रविष्टियों के कारण नंगे प्रारूप में आउटपुट करता है D, अर्थात किसी पथ के बिना छिपी विशेषता जैसे अन्य विशेषताओं पर स्वतंत्र निर्दिष्ट निर्देशिका में सभी उपनिर्देशिकाओं के नाम। DIR2>nul द्वारा त्रुटि संदेश आउटपुट को पुनर्निर्देशित करने के लिए उपयोग किया जाता है STDERR से डिवाइस NUL को हैंडल करने पर कोई निर्देशिका नहीं मिली है ।

पुनर्निर्देशन ऑपरेटर >कैरट चरित्र के साथ भाग जाना चाहिए, ^, पर के लिए कमांड लाइन शाब्दिक वर्ण के रूप में व्याख्या की जा करने के लिए जब विंडोज कमांड दुभाषिया इस कमांड लाइन आदेश को क्रियान्वित करने से पहले प्रक्रियाओं के लिए जो एम्बेडेड कार्यान्वित dirएक अलग आदेश की प्रक्रिया में कमांड लाइन शुरू कर दिया पृष्ठभूमि में।

के लिये प्रक्रियाओं पर कब्जा कर लिया उत्पादन को संभालने के लिए लिखा STDOUT एक शुरू कर दिया आदेश प्रक्रिया है जो पथ के बिना उपनिर्देशिका के नाम और डबल उद्धरण में संलग्न कभी नहीं कर रहे हैं।

के लिए विकल्प के साथ /Fखाली लाइनों जो के रूप में यहाँ नहीं होती है पर ध्यान नहीं देता DIR विकल्प के साथ /Bनहीं उत्पादन खाली लाइनों करता है।

के लिए एक अर्धविराम से शुरू होने वाली रेखाओं को भी नजरअंदाज कर दिया जाएगा जो कि पंक्ति वर्ण का डिफ़ॉल्ट अंत है। एक निर्देशिका नाम अर्धविराम से शुरू हो सकता है। उस कारण eol=|से वर्टिकल बार कैरेक्टर को एंड-ऑफ-लाइन कैरेक्टर के रूप में परिभाषित करने के लिए उपयोग किया जाता है, जिसके नाम में कोई निर्देशिका या फ़ाइल नहीं हो सकती है।

के लिए परिसीमाओं के रूप में अंतरिक्ष और क्षैतिज टैब का उपयोग करके सबस्ट्रिंग में लाइन को विभाजित किया जाएगा और निर्दिष्ट पाश चर के लिए केवल पहला स्थान / टैब सीमांकित स्ट्रिंग असाइन करेगा I। बंटवारे का यह व्यवहार यहां नहीं है क्योंकि निर्देशिका नाम में एक या अधिक स्थान हो सकते हैं। इसलिए delims=रेखा बंटवारे के व्यवहार को अक्षम करने और लूप चर I, हमेशा पूर्ण निर्देशिका नाम के लिए असाइन करने के लिए सीमांकक की एक खाली सूची को परिभाषित करने के लिए उपयोग किया जाता है ।

कमांड फॉर कमांड आरडी चलाता है एक रास्ता जो कारण है कि पर है बिना एक निर्देशिका के नाम के लिए आरडी कमांड लाइन फ़ोल्डर पथ फिर से एक बार निर्दिष्ट किया जाना चाहिए जो सबफ़ोल्डर नाम के साथ concatenated है।

उपयोग की गई कमांड को समझने के लिए और वे कैसे काम करते हैं, कमांड प्रॉम्प्ट विंडो खोलें, वहां निम्नलिखित कमांड निष्पादित करें, और प्रत्येक कमांड के लिए पूरी तरह से प्रदर्शित सभी सहायता पृष्ठों को बहुत सावधानी से पढ़ें।

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

5

पाठ दस्तावेज़ बनाने और इसे कॉपी / पेस्ट करने के लिए नोटपैड का उपयोग करें:

rmdir /s/q "%temp%"
mkdir "%temp%"

चयन करें इस रूप में सहेजें और फ़ाइल नाम:

delete_temp.bat

प्रकार के रूप में सहेजें: सभी फाइलें और क्लिक करें Save बटन पर करें।

यह किसी भी तरह के खाते (व्यवस्थापक या एक मानक उपयोगकर्ता) पर काम करता है। बस इसे चलाओ!

मैं इस उदाहरण में एक अस्थायी चर का उपयोग करता हूं, लेकिन आप किसी अन्य का उपयोग कर सकते हैं! पुनश्च: केवल विंडोज ओएस के लिए!


एक काफी आसान और साफ समाधान
कार्लोस लियू

4

फ़ाइल हटाने के लिए:

del PATH_TO_FILE

इसमें सभी फ़ाइलों के साथ फ़ोल्डर को हटाने के लिए:

rmdir /s /q PATH_TO_FOLDER

विशिष्ट फ़ोल्डर से सभी फ़ाइलों को हटाने के लिए (फ़ोल्डर को स्वयं नहीं हटाना) थोड़ा जटिल है। del /s *.*फ़ोल्डर्स को हटा नहीं सकते हैं, लेकिन सभी सबफ़ोल्डर से फ़ाइलों को हटा देता है। तो दो आदेशों की आवश्यकता है:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

हां यह सही है। दो चरण होने चाहिए। यह अधिक उत्थान के योग्य है, क्योंकि यह बताता है कि क्यों, ऊपर एक अधिक मतदान जवाब के साथ तुलना में।
पश्चिमीगंज

डेल कमांड लाइन चूक विकल्प /Aभी नष्ट करने के लिए छिपा विशेषता सेट और विकल्प के साथ फाइल /Fभी नष्ट करने के लिए केवल पढ़ने के लिए विशेषता सेट और अंतिम तर्क को दोहरे उद्धरण चिह्नों के साथ फ़ाइलें। तो del /A /F /Q "PATH_TO_FOLDER\*"बेहतर होगा। और के लिए कमांड लाइन करने के लिए संशोधित किया जाना चाहिए for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"की वजह से के लिए छिपा विशेषता सेट के साथ ध्यान न दी निर्देशिका। विकल्पों के साथ डीआईआर सिर्फ उनके नाम के साथ सभी निर्देशिकाओं को /AD /Bआउटपुट करता हैPATH_TO_FOLDER
मोफी

यह (कुछ) पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

4

आप सभी सामग्री और मूल फ़ोल्डर को स्वयं हटाने के लिए निम्न आदेश का उपयोग करके ऐसा कर सकते हैं:

RMDIR [/S] [/Q] [drive:]path            

यह पिछले दो उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

क्या यह उत्तर आवश्यकता को संबोधित करता है "कोई त्रुटि हो सकती है जैसे 'यह फ़ाइल / फ़ोल्डर पहले से ही उपयोग में है' ... जब ऐसा होता है, तो इसे जारी रखना चाहिए और उस फ़ाइल / फ़ोल्डर को छोड़ देना चाहिए।" ?
पीटर मोर्टेंसन

1

मैंने इनमें से कई तरीकों की कोशिश की, लेकिन किसी ने भी ठीक से काम नहीं किया।

मुझे साइट कमांड लाइन पर यह दो-चरणीय दृष्टिकोण मिला :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

यह ठीक उसी तरह काम करता है जैसा मुझे जरूरत थी और ओपी द्वारा निर्दिष्ट किया गया था।


दो कमांड लाइनों को एक कमांड लाइन के साथ जोड़ा जा सकता है: forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL विकल्प /Aको छिपी हुई विशेषता सेट के साथ फ़ाइलों को हटाने के लिए भी जोड़ा जाता है, अन्यथा DEL प्रत्येक छिपी हुई फ़ाइल के लिए एक नहीं मिला त्रुटि संदेश आउटपुट करेगा %pathtofolder%DEL विकल्प /Fको केवल-पढ़ने के लिए सेट की गई विशेषता के साथ फ़ाइलों को हटाने के लिए भी जोड़ा %pathtofolder%जाता है, अन्यथा DEL एक एक्सेस अस्वीकृत त्रुटि संदेश का उत्पादन करेगा।
मोफी

cmd.exeप्रत्येक फ़ाइल और प्रत्येक निर्देशिका के लिए एक आवृत्ति प्रारंभ करने के कारण यह समाधान यहां पोस्ट किए गए सभी अपूर्ण समाधानों में सबसे धीमा है %pathtofolder%। लाभ यह है कि है FORFILES छिपा विशेषता सेट के रूप में साथ निर्देशिका ध्यान नहीं है के लिए करता है।
मोफी

पुन: "यह ठीक उसी तरह काम किया जैसा कि मुझे ज़रूरत थी और ओपी द्वारा निर्दिष्ट किया गया था।" : क्या आपने आवश्यकता के लिए परीक्षण किया "कोई त्रुटि हो सकती है जैसे 'यह फ़ाइल / फ़ोल्डर पहले से उपयोग में है' ... जब ऐसा होता है, तो इसे जारी रखना चाहिए और उस फ़ाइल / फ़ोल्डर को छोड़ देना चाहिए।" ?
पीटर मोर्टेंसन

0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q

2 डी लाइन विंडोज टेंपर्ड डायरेक्टरी के सभी फोल्डर से प्रत्येक फाइल में मौजूद फाइल्स को हटा देगी और तीसरी लाइन इसके कंटेंट सहित डायरेक्ट्रीज को साफ करती है।
रॉबी

के लिए कमांड लाइन करने के लिए संशोधित किया जाना चाहिए for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"की वजह से के लिए छिपा विशेषता सेट के साथ ध्यान न दी निर्देशिका। विकल्पों के साथ डीआईआर सिर्फ उनके नाम के साथ सभी निर्देशिकाओं को /AD /Bआउटपुट करता है%TEMP%
मोफी

DEL के लिए प्रलेखन । मुझे लगता है कि आप सही रास्ते पर / एफ के साथ हैं: "केवल पढ़ने की सेटिंग को अनदेखा करें और वैसे भी हटा दें (बलपूर्वक)"
पीटर मोर्टेंसन

-10

उपयोग:

del %pathtofolder%\*.*   /s /f  /q

यह %pathtofolder%रीड-ओनली फ़ाइलों सहित सभी फ़ाइलों और सबफ़ोल्डरों को हटा देता है और पुष्टि के लिए संकेत नहीं देता है।


9
मुझे शत्रुता यह% pathfofolder% में खाली सबफ़ोल्डर छोड़ देता है।
डीएच

35
यह% pathtofolder% में सबफ़ोल्डर्स को नहीं हटाता है। इसलिए बुरा मुझे इस झूठे जवाब को वोट करने की कोई प्रतिष्ठा नहीं है
विटाली कोर्साकोव

1
जैसा कि विटालि कोर्साकोव द्वारा कहा गया है, यह सब फाइल और उपनिर्देशिकाओं की फाइलों को हटा देता है, लेकिन उपनिर्देशिकाओं को उसी स्थान पर छोड़ देता है जिसे ओपी ने पूछा था कि कैसे हटाएं।
फज इवांस

6
हालाँकि यह कमांड खाली फोल्डर को छोड़ देता है, लेकिन स्वीकार किए गए उत्तर की तुलना में यह अनुरोध के बहुत करीब है। परिस्थितियों में यह डिपेंड करता है। मेरे मामले में, मेरे पास खाली फ़ोल्डर होंगे, रूट डायरेक्टरी में बची फाइलों की तुलना में।
मार्कसुअ

लेकिन हम उस फ़ोल्डर और उप-फ़ोल्डर को कैसे हटा सकते हैं जो नेटवर्क शेयर में खुले थे जब अन्य क्लाइंट मशीन उस फ़ोल्डर में एक्सेस लिखने के लिए शेयर ड्राइव को खोलती है .. psfile और net files कमांड फाइल सत्र को बंद कर देगी लेकिन फिर कुछ सेकंड के बाद यह बनाएगी स्वचालित रूप से सर्वर में उस उपयोगकर्ता के लिए एक और सत्र ...
user1954762
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.