2008-12-03 12 views
63

एमएस-डॉस के पुराने संस्करणों में - मैं संस्करण 7 कहना चाहता हूं, लेकिन मैं गलत हो सकता था - deltree कमांड था, जो किसी दिए गए पथ से सभी उपनिर्देशिकाओं और फ़ाइलों को दोबारा हटा दिया गया था।डेलट्री के साथ क्या हुआ, और इसका प्रतिस्थापन क्या है?

deltree अब मौजूद नहीं है, लेकिन del एक पेड़ को हटाने की क्षमता का उत्तराधिकारी प्रतीत नहीं होता है। del /s फ़ाइलों को हटा देता है, लेकिन फ़ोल्डर नहीं।

आप आसानी से कैसे (यानी, एक कमांड में) बैच फ़ाइल से पेड़ हटाते हैं?

+0

संस्करण 5.0 में डेलट्री पेश किया गया था (मुझे अभी भी इसका उपयोग करने में सक्षम होने की गली याद है) - मैन मैं बूढ़ा महसूस करता हूं। –

उत्तर

66

जैसा कि अन्य ने उल्लेख किया है, rd कमांड में /s उप-निर्देशिकाओं को रिकर्सिवली हटाने के लिए स्विच है। तुम इतनी

rd /s /q c:\foobar 

के रूप में संकेत दिए बिना /q स्विच के साथ यह गठजोड़ कर सकते हैं जबरन किसी उप-निर्देशिका (और उसकी सामग्री) को हटाने के लिए क्या हर कोई याद आ रही है कि rdनहीं है deltree के लिए एक सटीक प्रतिस्थापन के रूप में प्रतीत होता है है (almost) windows deltree के लिए Googling द्वारा लौटाए गए प्रत्येक पृष्ठ पर आपको विश्वास होगा। deltree कमांड दोनों निर्देशिकाओं के लिए और फ़ाइलों के लिए काम किया, जिससे यह एक सुविधाजनक, सभी उद्देश्य हटाने का आदेश बना। यही कारण है निम्न में से दोनों मान्य हैं:

deltree /y c:\foobar 
deltree /y c:\baz.txt 

हालांकि rd (आश्चर्यजनक नहीं) केवल निर्देशिका के लिए काम करता है।के रूप में इस तरह के केवल इन आदेशों की पहली वैध है जबकि दूसरा देता है और त्रुटि और छोड़ देता है फ़ाइल अन-नष्ट कर दिया:

rd /s /q c:\foobar 
rd /s /q c:\baz.txt 

इसके अलावा, del आदेश केवल फ़ाइलें, नहीं निर्देशिकाओं के लिए काम करता है, इसलिए केवल दूसरा आदेश है वैध जबकि पहले एक त्रुटि देता है:

del /f /q c:\foobar 
del /f /q c:\baz.txt 

वहाँ के रूप में deltree के साथ किया जा सकता है फ़ाइल और निर्देशिका हटाने के लिए कोई अंतर्निहित तरीका है। rd और del का उपयोग व्यक्तिगत रूप से असुविधाजनक है क्योंकि इसे फ़ाइल-सिस्टम ऑब्जेक्ट (फ़ाइल-/फ़ोल्डर-नाम) एक फ़ाइल या निर्देशिका है जो हमेशा संभव या व्यावहारिक नहीं है या नहीं।

आप पिछले ओएस से deltree कमांड की प्रतिलिपि बना सकते हैं, हालांकि यह केवल विंडोज़ के 32-बिट संस्करणों पर काम करेगा क्योंकि यह 16-बिट डॉस कमांड (यहां तक ​​कि विंडोज 9एक्स में भी) है।

एक और विकल्प बैच-फ़ाइल बनाना है जो del और rd दोनों को कॉल करता है; कुछ इस तरह:

::deltree.bat 

@echo off 
rd %* 2> nul 
del %* 2> nul 

आप इसे के रूप में तो कहेंगे:

deltree.bat /s /q /f c:\foobar 
deltree.bat /s /q /f c:\baz.txt 

यह दोनों rd और del कहता है, nul को बहस में गुजर और आउटपुट पुनः निर्देशित त्रुटि से बचने के कि उनमें से एक हमेशा उत्सर्जित होगा।

आप शायद पैरामीटर को समायोजित या सरलीकृत करने या त्रुटि संदेशों को अनुमति देने के लिए व्यवहार को कस्टमाइज़ करना चाहते हैं, लेकिन फिर भी, यह आदर्श नहीं है और deltree के लिए प्रत्यक्ष प्रतिस्थापन नहीं है।

एक विकल्प तीसरे पक्ष के उपकरण को प्राप्त करना है, हालांकि खोजना क्वेरी-क्राफ्टिंग में एक वास्तविक अभ्यास है।

+1

@TobyAllen, "आरएम"? क्या आपका मतलब * rd * था? यदि ऐसा है, तो आपको सहायता टेक्स्ट को फिर से पढ़ना होगा; यह कहता है * निर्देशिका के अलावा, निर्दिष्ट निर्देशिका में ** सभी निर्देशिकाओं और फ़ाइलों को हटा देता है **। एक निर्देशिका पेड़ को हटाने के लिए प्रयुक्त। * जैसे मैंने कहा, यह फाइलों को हटा नहीं देता है। यदि आप इसे इस प्रकार उपयोग करते हैं: 'rd/s foobar.txt', यदि आप निश्चित हैं, तो यह आपको संकेत देगा, और यदि आप हाँ कहते हैं (या '/ q' स्विच का उपयोग करें), तो यह त्रुटि देता है' निर्देशिका नाम अमान्य है।' – Synetech

+0

आप वास्तव में 'आरएमडीआईआर/एस' के साथ एक निर्देशिका (इसके उपनिर्देशिका सहित) के तहत सब कुछ हटा सकते हैं, ताकि कहें कि एक झटका में दोनों फाइलों और फ़ोल्डर्स को हटाने का कोई तरीका वास्तव में गलत नहीं है। – vapcguy

38

यह आदेशों के साथ बदल दिया गया था: RMDIR या आरडी

/एस के साथ सभी सबडायरेक्टरियों हटाएँ

चुपचाप इसका इस्तेमाल/Q

उदाहरण के साथ:

RMDIR /S /Q Folder2Delete 
RD /S /Q Folder2Delete 

प्रलेखन:

+0

आरडी/एस/क्यू मेरे लिए काम किया – Ananda

4
$ help rd 
Removes (deletes) a directory. 

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

    /S  Removes all directories and files in the specified directory 
      in addition to the directory itself. Used to remove a directory 
      tree. 

    /Q  Quiet mode, do not ask if ok to remove a directory tree with /S 
2

असल RMDIR और आरडी आधुनिक विंडोज ऑपरेटिंग सिस्टम में आदेश एक भी आदेश में विलय दोनों आदेशों आरडी और विन 98 के deltree। यह एक आंतरिक आदेश है इसलिए आपको कोई RD.exe और RMDIR.exe नहीं मिलेगा।

यह "आरडी /?" टाइप करके बिना डबल qoutes के cmd में आप वही चाहते हैं जो आप चाहते हैं।

6

नास्तिक लग रहा है, मैंने अपना खुद का deltree.exe लिखा है। यह निर्देशिकाओं और फ़ाइलों दोनों के साथ काम करता है, और गति के लिए SHFileOperation() का उपयोग करता है।

https://github.com/ai7/toolbox/tree/master/deltree

deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1) 

Usage: deltree [options] <path> ... 

Options: 
    -y yes, suppresses prompting for confirmation 
    -s silent, do not display any progress dialog 
    -n do nothing, simulate the operation 
    -f force, no prompting/silent (for rm compatibility) 
    -r ignored (for rm compatibility) 

Delete directories and all the subdirectories and files in it. 

यह वाइल्डकार्ड लेता है और आप यूनिक्स rm की तरह उपयोग कर सकते हैं:

deltree -rf * 
0

एक निर्देशिका नष्ट करने के लिए और सभी यह

rd /s MY_DOOMED_DIR 
2

आजकल रिकर्सिवली सामग्री है, तो आप पावरहेल का उपयोग एक ही कार्य करने के लिए कर सकते हैं:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force" 
संबंधित मुद्दे