MS-DOS एक को छोड़कर सभी फ़ाइलों को हटाने का आदेश देता है


25

क्या कोई MS-DOS कमांड है जो मुझे एक को छोड़कर सभी फ़ाइलों को हटाने की अनुमति देता है?

एक उदाहरण के रूप में निम्न फ़ाइलों पर विचार करें:

a.001  
a.002  
a.003  
a.exe  
a.c  

क्या सभी फ़ाइलों को हटाने के लिए एक आदेश है a.c?

जवाबों:


36

इसे पूरा करने के लिए आप forऔर ifकमांड का उपयोग कर सकते हैं :

for %i in (*) do if not "%~i" == a.c del "%~i"

यह वर्तमान निर्देशिका के माध्यम से जाता है, और प्रत्येक फ़ाइल नाम की तुलना एसी से करता है यदि यह मेल नहीं खाता है, तो फ़ाइल हटा दी जाती है।


+1 को कभी भी सरल हटाने के लिए उपयोग करने के बारे में नहीं सोचा होगा ... यहाँ अच्छे उत्तरों का भार है!
विलियम हिल्सम

4
@Wil, जब आप forनियमित रूप से उपयोग करना शुरू करते हैं तो आप इसके लिए सभी प्रकार के पागल परिदृश्यों के साथ आते हैं। :)
केविन

4
@ माइक, आप "%% इन" (A: \ Some \ Path \ *) ऐसा कुछ चाहते हैं यदि% ~ nxi == एसी डेल% i "ध्यान दें कि उस फ़ोल्डर में फ़ाइलें प्राप्त करने के लिए पथ * समाप्त हो जाता है, * , और यह तुलना% ~ nxi के विरुद्ध है, बिना किसी पथ के नाम। इस तरह के छोरों के लिए विनाशकारी के लिए, यह "के लिए ... ईको% i" करने के लिए एक अच्छा विचार है यह देखने के लिए कि "... ... if% ... कमांड" चलाने से पहले क्या फाइलें प्रभावित होंगी।
केविन

1
बेहतर उपयोगdel "%i"
Mugen

1
यदि आपको IFस्टेटमेंट असंवेदनशील होने की आवश्यकता है , तो इसे बदल दें IF /I
15:20 बजे जेपी

16

आप सब कुछ हटाने से पहले केवल पढ़ने के लिए फ़ाइल सेट कर सकते हैं

attrib +r a.c
del *.*
attrib -r a.c

10

नहीं, वहाँ नहीं है। मैं एक निर्देशिका बनाऊंगा, उसमें महत्वपूर्ण फाइल कॉपी करूंगा, मिटा दूंगा , और फ़ाइल को वापस ले जाएं। फिर अस्थायी फ़ाइल को हटा दें।

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 कच्चे और तकनीकी रूप से @ चोर चोर इसे करने का एक बेहतर तरीका कहते हैं (इसलिए वहां +1 भी दिया), लेकिन गति के लिए, यह वह तरीका है जिससे मैं इसे करूंगा।
विलियम हिल्सम

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
क्या लाभ [] हैं?
बार्लॉप

1
@barlop: %fफ़ाइल नाम में स्थान हो सकता है।
पैराडाइरॉइड

@ अपरॉड कि कोई मदद नहीं करेगा यदि उसके लिए [4 r] == [4 r] प्रतिध्वनि बराबर मैंने कुछ इसी तरह से देखा है, जैसे। के बजाय []। मैं क्यों अनुमान लगा सकता हूं, लेकिन मैं इसे किसी ऐसे व्यक्ति से सुनना चाहता हूं जो यह करता है।
बार्लोप

@barlop: मुझे नहीं पता कि आपने वहां क्या लिखा है, लेकिन वर्ग के कोष्ठक उसी तरह काम करते हैं जैसे उद्धरण चिह्न होता है।
13

@paradroid C: \> यदि [4 r] == [4 r] इको एबीसी <ENTER> परिणाम देता है "r] == [4 इस समय अप्रत्याशित था।" जबकि C: \> यदि "4 आर" == "4 आर" इको एबीसी परिणाम एबीसी देता है। तो क्या आपको लगता है कि वे किसी भी तरह से बोली के निशान की तरह काम करेंगे? यहां तक ​​कि C: \> अगर [ab] == [ab] echo abc <- काम नहीं करता है तो समान त्रुटि देता है। b] == [ए इस समय अप्रत्याशित था। तो क्या आपको लगता है कि वे उद्धरण की तरह काम करते हैं?
बार्लॉप

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

मुझे लगता है कि यह शायद सहायक होगा, अगर यह समझाया जाता कि यह क्या करता है। ऐसा लगता है कि यह एक पूरे फ़ोल्डर ट्री को ट्रेस करता है, जो मुझे चाहिए। %app_path%और %file%पेड़ की जड़ें उखाड़ने के लिए हैं, और फ़ाइल को क्रमशः हटाने से बचने के लिए। क्या है ^, और हम Delकमांड में प्रति फ़ाइल चार टोकन क्यों पास कर रहे हैं ?
लार्स

0

गति के लिए, मैं डेलन का उपयोग करता हूं :

delen /! a.c

TCC / LE में एक अधिक शक्तिशालीdelकमांड भी है:

del /[!a.c] *

del /[!a.c] *येल्ड्सInvalid switch - "[!a.c]".
कार्लफिलिप

@karlphillip: यह ठीक काम करता है, "TCC / LE में"
विरोधाभास

अहा! उस टिप्पणी को पहले नहीं देखा था, धन्यवाद भाई।
कर्लफिलिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.