एक फ़ोल्डर और उसके उप फ़ोल्डर्स से सभी फ़ाइलों को हटा दें


52

मैं सभी फ़ाइलों को एक फ़ोल्डर संरचना से निकालना चाहता हूं, इसलिए मैं एक खाली फ़ोल्डर संरचना के साथ छोड़ दिया गया हूं।

क्या यह बैच या VBScript स्क्रिप्टिंग में प्राप्त किया जा सकता है ?

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

आप क्या सुझाव दे सकते हैं?


आप एक पुनरावर्ती हटाने का मतलब है? यह वास्तव में किया जा सकता है। कुछ इस तरह rd /s /q "c:\folder aसे सभी फाइलों और फ़ोल्डरों पर एक पुनरावर्ती डिलीट किया जाएगाFolder A
रामहाउंड

मैं कर सकता था, मैं नहीं जानता कि कैसे पटकथा में स्क्रिप्ट है, लेकिन पिछले चलाने के लिए पटकथा पटकथा है।
BobJim

2
अब सीखने का एक सही समय है, मैं विरासत के उद्देश्यों के लिए बैच और वीबीएस सिंटैक्स पर शोध करूंगा, लेकिन पीएस सीखने में अधिक समय लगाऊंगा।
एमडीमोइरे 313

मेरे पास कोड की जांच करने का मौका था, हालांकि मुझे यकीन है कि यह काम करेगा। मैं वापस आऊंगा और अपनी प्रारंभिक क्वेरी के लिए सबसे उपयुक्त उत्तर चुनूंगा।
BobJim

मैं दूसरी @ बिगहॉमी की सिफारिश करूंगा - मैंने अभी कुछ पॉवरशेल सीखे हैं और मुझे कहना होगा कि यह बहुत साफ-सुथरा है - बहुत कठिन नहीं, किसी भी कोडर के शस्त्रागार में एक अच्छा हथियार। मैं इसे अब अक्सर उपयोग करता हूं।
बेन

जवाबों:


75

यह PowerShell का उपयोग करके पूरा किया जा सकता है :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

यह आदेश प्रत्येक चाइल्ड आइटम को प्राप्त $pathकरता है, प्रत्येक पर डिलीट विधि को निष्पादित करता है, और काफी तेज है। फ़ोल्डर संरचना को बरकरार रखा गया है।

यदि आपके पास एक्सटेंशन के बिना फाइलें हो सकती हैं, तो उपयोग करें

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

बजाय।

ऐसा लगता है कि -Fileपैरामीटर PowerShell v2 के बाद जोड़ा जा सकता है। अगर ऐसा है, तो

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

यह एक्सटेंशन वाली फ़ाइलों के लिए ट्रिक करना चाहिए।

यदि यह काम नहीं करता है, तो जांचें कि आपके पास पॉवर्सशेल का अप-टू-डेट संस्करण है


1
यह -Include *.*नहीं -Include ., बड़ा अंतर! :-)
एमडीमोहोर 313

Get-ChildItem -Path D: \ EmptyThisFolder -Include -फाइल-रेकर | foreach {$ _। हटाएँ ()}
BobJim

क्यों इस्तेमाल कर रहे हो -Include .?? यही समस्या है।
MDMoore313

2
क्या वे लागू नहीं कर सकते powershell --version? क्या वे सकारात्मक अंकों के साथ संस्करण संख्या का उपयोग नहीं कर सकते हैं? यह सिर्फ पागल है। एक कार्यक्रम के एक संस्करण संख्या का पता लगाने के तरीके पर एक प्रश्न के लिए 1300 से अधिक upvotes ?
थॉमस वेलर

1
@demonicdaron इसकी नहीं माना जाता है; ओपी का प्रश्न फ़ोल्डर संरचना को संरक्षित करने के लिए था ।
MDMoore313

25

लघु और सुइट पॉवरशेल। यह सुनिश्चित नहीं है कि पीएस का सबसे कम संस्करण किसके साथ काम करेगा।

Remove-Item c:\Tmp\* -Recurse -Force

2
अच्छा और आसान। इस चाल को स्वीकार जवाब नहीं था, जबकि किया!
demonicdaron

यह स्वीकृत उत्तर होना चाहिए, आप तब भी टाइप कर सकते हैं rm *क्योंकि यह वास्तव में लागू करने के लिए उचित नहीं है (पुष्टि संवाद में "हां टू ऑल" विकल्प वैसे भी है)।
जे गार्सिया

22

आप delकमांड के साथ ऐसा कर सकते हैं :

dir C:\folder
del /S *

/Sस्विच रिकर्सिवली केवल फाइलों को डिलीट करना है।


2
क्या यह केवल फ़ाइलों को हटा देगा लेकिन फ़ोल्डर्स को छोड़ देगा?
BobJim

5
हाँ। आप /Pविकल्प जोड़ सकते हैं ताकि यह आपको हर डिलीट की पुष्टि करने के लिए कहेगा।
12

धन्यवाद बीमार इसे जाने दो! उम्मीद है कि समय के भार को बचाएगा!
बोबजिम

3
हाँ। और छिपी हुई और सिस्टम फ़ाइलों को हटाने के लिए, हटाने attrib -s -r -h Folder\*.* /s /dसे पहले करें। और अनुमतियों के लिए takeownकमांड का उपयोग करें ।
जेट

2
और आप वाइल्डकार्ड का उपयोग करते समय पुष्टि के लिए नहीं पूछ सकते हैं ।
आयलातन

4

आपके मूल प्रश्न पर लाइनों के बीच पढ़ना मैं एक वैकल्पिक BATCH कोड लाइन प्रदान कर सकता हूं जिसका आप उपयोग कर सकते हैं। जब यह दौड़ाया जाएगा तो केवल 60 दिनों से अधिक पुरानी फ़ाइलों को हटा दें। इस तरह से आप इसे एक निर्धारित कार्य में लगा सकते हैं और जब यह चलता है तो यह उन अतिरिक्त फ़ाइलों को हटा देता है जिनकी आपको पूरी निर्देशिका को उड़ाने के बजाय ज़रूरत नहीं है। आप चाहें तो 60 से 5 दिन या 1 दिन भी बदल सकते हैं। यह फोल्डर को डिलीट नहीं करता है।

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

इस विचार के लिए धन्यवाद, लेकिन वर्तमान में मुझे लगता है कि "खाली" प्रक्रिया एक बहुत ही अनिर्धारित एडहॉक समय सीमा पर पूरी हो जाएगी। मैं हालांकि भविष्य के लिए उस कोड को रखूंगा! चीयर्स
बॉबीजिम

शीर्षक "एक फ़ोल्डर और उसके उप फ़ोल्डर्स से सभी फ़ाइलों को हटा दें" पढ़ता है, इसलिए यह एक समाधान नहीं है।
एंडर्स लिंडन


3

एकल फ़ाइल या फ़ोल्डर को हटाने के लिए PowerShell का उपयोग करें। डिलीट कमांड को पावरशेल में निष्पादित करने से पहले हमें यह सुनिश्चित करने की आवश्यकता है कि आप सर्वर या पीसी में एक ऐसे खाते से लॉग इन हैं जिसमें उन वस्तुओं तक पूरी पहुंच है जिन्हें आप हटाना चाहते हैं।

उदाहरण के साथ: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-use-powershell/

किसी फ़ाइल को हटाने के लिए PowerShell commnads का उपयोग करना

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

उपरोक्त कमांड "DummyfiletoDelete.txt" फ़ाइल को निष्पादित और हटा देगा जो "C: \ dotnet-helpers" स्थान के अंदर मौजूद है।

सभी फ़ाइलों को हटाने के लिए PowerShell commnads का उपयोग करना

Remove-Item -Path "C: \ dotnet-helpers *। *"

सभी फ़ाइलों और फ़ोल्डरों को हटाने के लिए PowerShell commnads का उपयोग करना

Remove-Item -Path "C: \ dotnet-helpers *। *" -Recurse

-recurseनीचे ड्रिल करता है और बहुत सारी फाइलें ढूंढता है। –recurseपैरामीटर PowerShell अनुमति मांगे बिना किसी भी बच्चे को आइटम हटाने के लिए अनुमति देगा। इसके अतिरिक्त, -FFS पैरामीटर को छिपी या केवल-पढ़ने वाली फ़ाइलों को हटाने के लिए जोड़ा जा सकता है।

का उपयोग कर -Force फ़ाइलों को जबरदस्ती हटाने के लिए

सभी फ़ाइलों को जबरदस्ती हटाने के लिए PowerShell कमांड का उपयोग करना

Remove-Item -Path "C: \ dotnet-helpers *। *" -Force


1

PowerShell का उपयोग करके यह प्रयास करें। इस उदाहरण में मैं .class फ़ाइलों को हटाना चाहता हूं:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. विंडोज एक्सप्लोरर में सभी फाइलों और फ़ोल्डरों वाले रूट डायर का चयन करें।

  2. निम्न को खोजें *

  3. प्रकार के आधार पर छाँटें (सभी फ़ोल्डर्स सबसे ऊपर होंगे और नीचे सूचीबद्ध सभी फाइलें)

  4. सभी फ़ाइलों का चयन करें और हटाएँ दबाएं।

यह सभी फ़ाइलों को हटा देगा और निर्देशिका संरचना को संरक्षित करेगा।


1

वर्तमान निर्देशिका और उप-निर्देशिकाओं से सभी फ़ाइलों को हटा दें लेकिन फ़ोल्डर्स की संरचना को छोड़ दें।

( /Q) स्विच उपयोगकर्ता से यह पूछने के लिए है कि क्या वह हटाना ठीक है

सावधानी : यह /Qसुनिश्चित करने के लिए बिना प्रयास करें कि आप कोई कीमती चीज नहीं हटा रहे हैं।

del /S * /Q 

1

यह सबसे आसान तरीका है IMO

PowerShell खोलें, निर्देशिका में नेविगेट करें ( cd), THEN

ls -Recurse * | rm

(पूफ़) सब कुछ छूट गया ...

यदि आप किसी विशिष्ट एक्सटेंशन के आधार पर हटाना चाहते हैं

ls -Recurse *.docx | rm

ls निर्देशिका को सूचीबद्ध कर रहा है

-Recurse किसी भी उप निर्देशिका में जाने के लिए एक ध्वज को कहने वाला शक्तियां है

* सब कुछ कहता है

*.doc .doc एक्सटेंशन के साथ सब कुछ

| आउटपुट को बाएं से दाएं फ़ीड करें

rm हटाना

अन्य सभी उत्तर आवश्यक से अधिक भ्रमित करने के लिए दिखाई देते हैं।


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

उपरोक्त उत्तरों के पूरक के रूप में, वास्तव में गेट-चाइल्डिटम का उपयोग करने की आवश्यकता नहीं है और परिणाम को उपरोक्त उत्तरों में पाइपलाइन से पास करना होगा, क्योंकि -Include कीवर्ड को निकालें-आइटम कमांड में शामिल किया गया है

एक बस:

निकालें-आइटम-शामिल करें " " "C: \ Temp" -Recurse

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.