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


135

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

वर्तमान में मेरे पास निम्नलिखित हैं:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

यह मेरी RMS निर्देशिका में सभी .db फ़ाइलों को हटा देगा , हालाँकि मैं इस निर्देशिका की हर एक चीज़ को हटाना चाहता हूँ। मैं यह कैसे कर सकता हूँ?


3
del /?प्रॉम्प्ट पर टाइप करें । यह आपको टूल का उपयोग करने के तरीके की जानकारी देगा। इस मामले के लिए, del *.* /sयह काम करेगा लेकिन इसे गलत निर्देशिका में न करें!
माइकल टॉड

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir

मैं सही जवाब बदलने के लिए प्रति वोट सुझाव दूंगा
ग्रेग

5
फोरस्वर के उत्तर से RMSनिर्देशिका को भी हटा दिया जाता है, जो कि ऐसा नहीं हो सकता था। (वास्तव में यह अक्सर वही होता है जो मैं नहीं चाहता, क्योंकि तब मैं निर्देशिका का मूल टाइमस्टैम्प खो देता हूं और इसकी कोई भी अनुमति है।) किसी निर्देशिका की सभी सामग्री को निकालने के लिए मेरा जवाब देखें लेकिन निर्देशिका को स्वयं में छोड़ दें जगह।
Bill_Stewart

जवाबों:


52

del *.* के बजाय del *.db । वह सब कुछ निकाल देगा।


56
नोट: यदि आप बाईपास करना चाहते हैं "क्या आप सुनिश्चित हैं कि आप हटाना चाहते हैं ..." शीघ्र youll को जोड़ना होगा / FQ झंडे:del . /F /Q
Rhyuk

40
यह केवल फाइलों को हटाता है - फ़ोल्डर्स नहीं
icc97

52
इसे सही उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए क्योंकि यह फ़ोल्डर्स को नष्ट नहीं करता है (जैसा कि प्रश्न में कहा गया है)।
Bill_Stewart

158

उपयोग:

  • एक बैच फ़ाइल बनाएँ

  • नीचे दिए गए पाठ को बैच फ़ाइल में कॉपी करें

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

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


4
बहुत बढ़िया, मैं एक मासिक बैच की नौकरी के लिए फ़ाइलों और फ़ोल्डरों को साफ करने के लिए कुछ ढूंढ रहा था और इसने यह चाल चली।
डेव हार्डिंग

9
सुनिश्चित करें कि निर्देशिका ऐसा करने से पहले मौजूद है।
Bill_Stewart

2
यदि आपके फाइलनाम में 'विशेष' अक्षर हैं, तो पहले chcp 10000UTF-16 में एन्कोडिंग को बदलें
Demelziraptor

3
बस Bill_Stewart से टिप्पणी के लिए एक नोट जोड़ना चाहते हैं। जिस कारण से आप यह सुनिश्चित करना चाहते हैं कि निर्देशिका मौजूद है अन्यथा, यह स्पष्ट कर देगा कि आप वर्तमान में जो भी निर्देशिका में हैं। मेरे मामले में, यह वह बैच फ़ाइल थी जिस पर मैं 30 मिनट से अधिक समय से काम कर रहा था। :( अच्छी बात है कि शेष फ़ोल्डर स्रोत नियंत्रण में था।
हेलिओस 456

2
@ (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) वे त्रुटि और विलोपन संदेशों को दबाने के लिए लूप को बदलते हैं
कार्ल वॉल्श

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

यह फ़ोल्डर (और स्वयं फ़ोल्डर) से सब कुछ हटा देगा।


13
मुझे लगता है कि प्रश्न सभी सामग्री की निर्देशिका को खाली करने के बारे में है, लेकिन निर्देशिका को स्वयं हटाना नहीं है।
Bill_Stewart

16

del *.*केवल फ़ाइलों को हटा देगा, लेकिन उपनिर्देशिका नहीं। किसी निर्देशिका की सामग्री को बनाने के लिए, आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

pushdनिर्देशिका में परिवर्तन जिनमें से आप बच्चों को हटाना चाहते हैं। फिर जब rdवर्तमान निर्देशिका और सभी उप निर्देशिकाओं को हटाने के लिए कहा जाता है, तो उप निर्देशिकाओं का विलोपन सफल होता है, लेकिन वर्तमान निर्देशिका का विलोपन विफल हो जाता है - क्योंकि हम इसमें हैं। यह एक त्रुटि पैदा करता है जो 2> NULनिगल जाता है। (2 त्रुटि स्ट्रीम होने के नाते)।


6
मैं वास्तव में हैरान था कि यह कैसे थोड़ा सा काम करता है, इसलिए दूसरों के लिए एक स्पष्टीकरण के रूप में: पुशड उस निर्देशिका में बदल जाता है जिसमें आप बच्चों को हटाना चाहते हैं। फिर जब rd वर्तमान निर्देशिका और सभी उप निर्देशिकाओं को हटाने के लिए कहता है, तो उप निर्देशिकाओं का विलोपन सफल हो जाता है, लेकिन वर्तमान निर्देशिका का विलोपन विफल हो जाता है - क्योंकि हम इसमें हैं। यह एक त्रुटि पैदा करता है जो 2> NUL निगल जाती है। (2 त्रुटि स्ट्रीम होने के नाते)। बहुत चालाक श्री स्टीवर्ट!
काइनेटिक

ओह, और "सेट्लोकल एनेक्स्टेंशन" एक साथ वर्तमान निर्देशिका को स्टैक पर पुश करने की क्षमता को बदल देता है, और निर्देशिका को बदल देता है। यह केवल पूर्व XP की आवश्यकता प्रतीत होती है, जैसा कि वहाँ है और बाद में यह वैसे भी ऑन हो जाता है।
काइनेटिक

क्या आप टिप्पणी से जानकारी को उत्तर में एकीकृत कर सकते हैं (टिप्पणियां किसी भी समय गायब हो सकती हैं)? ( "एडिट:" "अपडेट:" लेबल ) का उपयोग किए बिना
पीटर मोर्टेंसन

12

मैंने अभी इसे एक साथ रखा है, जिसे पोस्ट किया गया है

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

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


2
तो, त्वरित टिप - यदि आप "IF EXIST" कथन के साथ भी इसे नेटवर्क पथ पर चलाने का प्रयास करते हैं, तो यह फ़ोल्डर को सेट करने में विफल हो जाएगा और एक बयान cmd प्रॉम्प्ट में दर्ज किया जाएगा "UNC पथ समर्थन नहीं कर रहा है, डिफ़ॉल्ट रूप से विंडोज़ निर्देशिका "तो यह आपके विंडोज़ निर्देशिका में सब कुछ हटाने का प्रयास करेगा। तो सावधान रहें।
CBRF23

11

आप इसका उपयोग कर सकते हैं delऔर /Sध्वज (यह बताने के लिए कि सभी उपनिर्देशिकाओं से सभी फ़ाइलों को पुनः प्राप्त करने के लिए):

del /S C:\Path\to\directory\*

आरडी आदेश का भी इस्तेमाल किया जा सकता है। तुरंत एक संकेत के बिना चुपचाप हटा दें:

@RD /S /Q %VAR_PATH%

Rmdir (rd)



3

निम्नलिखित प्रयास करें; इससे मेरा काम बनता है।

मेरे पास एक एप्लिकेशन है जो मेरे "C: \ tmp" फ़ोल्डर में डेटा डंप करता है, और निम्नलिखित मेरे लिए सबसे अच्छा काम करता है। यह भी नहीं पूछता है हाँ या नहीं डेटा को हटाने के लिए। मैंने हर 5 मिनट के बाद इसे चलाने का कार्यक्रम बनाया है

cd "C:\tmp"

del *.* /Q

7
यदि फ़ोल्डर "C: \ tmp" मौजूद नहीं है (यदि आपने या किसी अन्य एप्लिकेशन ने उस फ़ोल्डर को हटा दिया है) और यदि आप इसे चलाने का प्रयास करते हैं, तो क्या यह "C: \" के अंदर अन्य फ़ोल्डर से डेटा को नहीं हटाएगा? (यह मेरे साथ हुआ)
विक्रम

4
जैसा कि विक्रम नोट: 1) यह बहुत खतरनाक है, और 2) यह उपनिर्देशिका को नहीं हटाता है जैसा कि प्रश्न में कहा गया है।
Bill_Stewart

2
फ़ोल्डरों की बात के अलावा ... आप बस कर सकते हैं del /q c:\tmp\*.*, जो लगभग एक लाख गुना सुरक्षित है। उल्लेख नहीं करने cdसे केवल मार्ग बदलेगा, ड्राइव नहीं।
Nyerguds

1
यह भयानक सलाह है। जैसा कि दूसरों ने उल्लेख किया है कि आप इसके परिणामस्वरूप बहुत आवश्यक डेटा को समाप्त कर सकते हैं। हटाने के लिए ध्वजांकित मुझे लगता है कि यह बहुत बुरा है।
रैनफैस्कॉटलैंड

2

बेहतर अभी तक, मान लें कि मैं C:\windows\tempफ़ोल्डर के तहत सब कुछ निकालना चाहता हूं ।

@echo off
rd C:\windows\temp /s /q

11
जो डायरेक्टरी को हटा देता है c:\windows\temp। मुझे नहीं लगता कि मूल सवाल यही पूछ रहा था।
Bill_Stewart

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

1
दुःख की बात है, हटाएं और बैच स्क्रिप्ट से तत्काल
रीक्रिएट करने

2

आप जिस फोल्डर को क्लियर कर रहे हैं, उस खाली फोल्डर को मिरर करने के लिए आप रोबोकॉपी का इस्तेमाल कर सकते हैं।

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

यह भी काम करता है अगर आप वास्तविक फ़ोल्डर को निकाल या फिर से बना नहीं सकते हैं।

इसके लिए मौजूदा खाली निर्देशिका की आवश्यकता होती है।


1
रोबोकॉपी की मदद के अनुसार, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- इसलिए मैं काफी निश्चित हूं कि /Eयह बेमानी है।
Nyerguds

2

उपयोग

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

यह संस्करण बिना पूछे हटा देता है:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

उदाहरण:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

यह साफ हो जाएगा C:\foo1\foo\foo\foo3

(मैं अब्दुल्ला साबूइन के जवाब का उल्लेख करना चाहूंगा । मेरे बारे में उनकी नकल करने के बारे में मिलाजुला था। मैंने उनके पोस्ट पर ध्यान नहीं दिया। मैं त्रुटियों को इंगित करने के लिए आपको मेलपोमिन धन्यवाद देना चाहूंगा !)


यह बिल्कुल काम नहीं करता है। खाली निर्देशिका नहीं होने पर rmdir fooत्रुटियां foo
melpomene

@melpomene मुझे त्रुटि मिली और इसे ठीक किया जाना चाहिए !!
ट्राविडे माइनक्राफ्ट और अधिक

1
मेरा मतलब किसी भी तरह से @Abdullah Sabouni की नकल करना नहीं था। मैंने इस पर गौर नहीं किया होगा। मुझे माफ कर दो।
ट्रवीड्यूड Minecraft और अधिक

@melpomene मैंने अपनी त्रुटि और जो कुछ हुआ, उसके बारे में अपनी बात बताई। लेकिन मैंने फैसला किया है कि अगर यह किसी भी तरह से मदद करता है, तो इसे नष्ट न करें। यह बात बताने के लिए धन्यवाद।
ट्रवीड्यूड Minecraft और अधिक

@TravieDudeMinecraftandMore +1 - मेरे लिए भी काम किया।
गाई अवराम

0

आप सब कुछ rmdirया delअकेले के साथ नहीं हटा सकते हैं:

  • rmdir /s /qवाइल्डकार्ड परमेस को स्वीकार नहीं करता है। तो rmdir /s /q *त्रुटि होगी।
  • del /s /f /q सभी फ़ाइलों को हटा देगा, लेकिन खाली उपनिर्देशिकाएँ बनी रहेंगी।

मेरा पसंदीदा समाधान (जैसा कि मैंने कई अन्य बैच फ़ाइलों में उपयोग किया है) है:

rmdir /s /q . 2>NUL

0

ग्रेग के उत्तर का केवल एक संशोधित संस्करण :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

आप सही रास्ते पर थे। फ़ोल्डर को जोड़ने के लिए बस कोड जोड़ें जो फिर से वापस हटा दिया गया है।


1
मैं इस समाधान की अनुशंसा नहीं करता हूं क्योंकि यह निर्देशिका को हटाता है (इस प्रकार इसकी अनुमति खो देता है) और इसे फिर से बनाता है (संभवतः विभिन्न अनुमतियों के साथ)।
Bill_Stewart

-3

सभी फ़ाइलों को हटाने के लिए आपको यह कमांड चलाना चाहिए:

del*.*

6
21:04 पर Jul 26 '11 से स्वीकृत उत्तर। जब आपके पास कुछ नया न हो तो कृपया उत्तर न जोड़ें।
Stephan

2
@Stephan से मान्य समालोचक के अलावा, कमांड को del *.*(एक स्थान के साथ) होना आवश्यक है
Ty Hitzeman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.