Rmdir या rd कमांड के साथ वाइल्डकार्ड का उपयोग करना


40

मान लीजिए कि D:ड्राइव में कुछ फ़ोल्डर हैं :

D:\Air
D:\Abonden
D:\All
D:\Whatever

मैं "ए" (सभी सबफ़ोल्डर्स और फ़ाइलों सहित) से शुरू होने वाले सभी फ़ोल्डरों को हटाना चाहता हूं। मैंने इस आदेश की कोशिश की:

rmdir D:\A* /s /q

मुझे एक त्रुटि मिलती है, हालांकि :(

फ़ाइल नाम, निर्देशिका नाम या वॉल्यूम लेबल सिंटैक्स गलत है।

delआदेश के साथ काम करता *है, लेकिन मैं अच्छी तरह से फ़ोल्डर हटा की जरूरत है।
क्या rmdirकमांड के माध्यम से इसे प्राप्त करने का कोई तरीका है ?


2
विंडोज या डॉस कमांड गोले के विकास में एकरूपता और सामान्य ज्ञान कभी नहीं था। सबसे दुखद बात यह है कि जब ये गोले विकसित किए गए थे, जो कि बुद्धिमान डिजाइनों पर प्रकाश डालते थे तो मॉडल सिस्टम वहाँ थे। बेशक खोल गैर-मौजूद विचार प्रक्रिया के लिए भयानक का एक उदाहरण है जो इस कचरे को एक साथ थप्पड़ मारता है - काश मैं आपको बता सकता हूं कि मैं वास्तव में क्या सोचता हूं, हा हा।
रिक ओ'शे

जवाबों:


33
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

हालांकि परीक्षण करने के लिए इसका उपयोग करें:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

यह कमांड प्रॉम्प्ट में चलाई जाने वाली कमांड को पाइप करेगा और आपको यह देखने की अनुमति देगा कि क्या हो रहा है।

ध्यान रखें कि यह "C: \ temp \ jjj \ aaa" जैसे सबफ़ोल्डर्स को भी खोजेगा और आ फोल्डर को हटा देगा। यदि आप चाहते हैं कि यह केवल शीर्ष स्तर के फ़ोल्डरों "C: \ temp \ aaa" को देखें, तो "/s"कमांड से हटा दें ।

इसकी कुंजी A * है, जहां आप अपनी खोज स्ट्रिंग में डालेंगे। यह वाइल्डकार्ड को स्वीकार करेगा aaa*, aaa*और *aaa*यदि आप इसे चाहते हैं।


जैसा कि, यदि पथ / फ़ोल्डर नाम में अंतरिक्ष वर्ण हैं, तो कमांड टूट जाएगी।
३१४१५

1
क्या हम A के लिए "IF NOT EXIST goto EFO" जोड़ सकते हैं?
सेरदार

3
यह काम करता है यदि पथ में अंतरिक्ष वर्ण सम्‍मिलित हैं: for / f "delims ="% i in ('dir / a: d / s / b A *') do rd / s / q "% i"
लुइस कैंटरो - MSP

5
मैं बस इतना जोड़ना चाहूंगा कि अगर इसे बैच फ़ाइल के भीतर से चल रहा है तो आपको दो प्रतिशत संकेतों का उपयोग करने की आवश्यकता है ताकि कमांड बन जाएfor /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
फ्रेड क्लॉसन

दो बार झंडा 'w / उप' का उपयोग करने की आवश्यकता नहीं है :)
lunicon

25

वाइल्डकार्ड का उपयोग करके फ़ोल्डर हटाना

rmdir/ rdअकेले आदेश का समर्थन नहीं करता वाइल्डकार्ड वर्णों (जो है, *और ?)। आप इस सीमा को forलूप में लपेटकर इसे हल कर सकते हैं ।

उदाहरण उपयोग

for /d %G in ("X:\A*") do rd /s /q "%~G"

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

कई पैटर्न

अलग-अलग पैटर्न से मेल खाने वाले कई फ़ोल्डरों को हटाने के लिए वाक्यविन्यास बहुत अलग नहीं है। जैसा कि @debham ने सही ढंग से बताया, एक-पंक्ति कमांड पर्याप्त है। आप विभिन्न रास्तों को भी निर्दिष्ट कर सकते हैं:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

बोनस - फ़ोल्डर अस्तित्व की जाँच

यदि आप जांचना चाहते हैं कि क्या विशिष्ट फ़ोल्डर मौजूद हैं, तो आप निम्न कमांड का उपयोग कर सकते हैं:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

आगे की पढाई


क्या हम A के लिए "IF NOT EXIST goto EFO" जोड़ सकते हैं?
सेरदार

उदाहरण के लिए हम मानते हैं कि ए अक्षर से शुरू होने वाला कोई फोल्डर नहीं है। तो कमांड * B के लिए जाना चाहिए। मुझे नहीं पता कि मैं समझा सकता हूं या नहीं :(
serdar

1
मुझ से +1। मुझे डाउन वोट समझ में नहीं आता है। यद्यपि आप अपने सरल FOR /Dऔर FOR /D /Rआदेशों के साथ कई पैटर्न कर सकते हैं । बस उपयोग करें in( "A*" "B*" "C?D" )
डेबानम

1
वास्तव में आपको /Rविकल्प की आवश्यकता होती है क्योंकि मास्क से मेल खाने वाला सबफ़ोल्डर एक माता-पिता के अधीन हो सकता है जो नहीं करता है।
दिनभन

5
चेतावनी: यदि आप .bat फ़ाइल में इस समाधान का उपयोग करना चाहते हैं, तो आपको% G के बजाय %% G का उपयोग करना होगा, यहाँ
ValarDohaeris

18

कैसे किसी ने अभी तक forfiles के बारे में ओपी नहीं बताया है ?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/ P pathname है - जहाँ खोज शुरू होती है
/ M सर्च मास्क है, जो ए के साथ शुरू होने वाली फाइलों की तलाश में है
/ C निष्पादित करने की आज्ञा है
/ एस पुनरावर्ती सबफ़ोल्डर है (यहाँ शामिल नहीं है, क्योंकि ऑप ने नहीं पूछा था)

2
यह एक उत्कृष्ट उत्तर है, इसे स्वीकार किया जाना चाहिए।
eacousineau

1
बहुत अच्छा समाधान और अच्छी तरह से समझाया।
एंड्रियास

उपयोगी उत्तर: and31415 के उत्तर केfor /d रूप में D लेकिन IMO क्लीनर और अधिक कुशल है।
सुपर नोएल

12

adn31415 उत्तर सही है, लेकिन टूटता है यदि आप इसे बैच या cmd स्क्रिप्ट में रखते हैं। मैंने घंटों तक अपना सिर पीटा जब तक मुझे पता नहीं चल गया कि आप इसका उपयोग कैसे करते हैं।

डॉस कमांड विंडो में:

for /d %G in ("X:\A*") do rd /s /q "%~G"

बैच या cmd स्क्रिप्ट में:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

यदि आप इसे ".bat" या ".cmd" फ़ाइल में रखना चाहते हैं, तो आपको "%" वर्णों को दोगुना करना होगा।


3
आपने बैच स्क्रिप्ट के लिए मेरा समय बचाया!
तुआन

कोई बात नहीं दोस्त :) इसीलिए जवाब पोस्ट किया क्योंकि मुझे पता था कि यह स्पष्ट नहीं था और अधिक लोग इसमें भाग लेंगे।
सैम बी

क्या हम एक बहिष्करण को हटाए जाने के लिए नहीं जोड़ सकते हैं?
सेदार

SET / P PC = ENTER IP या HOST NAME के ​​लिए / d %% a ("\\% PC% \ D $ \ A *। *") Rd / s / q "%% a" करें, क्या यह ठीक से काम करता है ?
सेदार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.