2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

Massaal verwijderen van bestanden in Windows

Ik heb een directory, die ~ 3 miljoen bestanden bevat in bepaalde subdirectories op een Windows 2008 server. Handmatig verwijderen van de bestanden via SHIFT+DEL op de hoofddirectory duurt eeuwen. Is er een andere manier om het verwijderen op een snellere manier te doen?

Antwoorden (14)

180
180
180
2011-05-27 11:27:41 +0000

WAARSCHUWING: als je symlinks hebt naar directories dan zal del de eigenlijke directories verwijderen en niet de symlinks. Wees hier heel voorzichtig mee en voer deze commando’s niet uit tenzij je weet dat er geen symlinks in de doelmap staan.

  • *

Ik moet regelmatig veel bestanden en directories verwijderen van een schijf met WinXP encryptie, meestal zo'n 22 GB met 500.000 bestanden in 45.000 mappen.

Verwijderen met Windows Verkenner is waardeloos omdat het veel tijd verspilt met het opsommen van de bestanden. Ik verplaats meestal de dingen die ik moet verwijderen naar C:\stufftodelete en heb een deletestuff.bat batch bestand naar rmdir /s/q C:\stufftodelete. Dit is gepland om ‘s nachts te draaien, maar soms moet ik het overdag doen, dus hoe sneller hoe beter.

Hier zijn de resultaten van een snelle tijdtest van een klein 5.85 MB monster van 960 bestanden in 303 mappen. Ik heb methode 1 uitgevoerd, gevolgd door methode 2, en daarna de testmappen gereset.

Methode 1 verwijdert de bestanden en de mappenstructuur in één keer:

rmdir /s/q foldername

Methode 2 heeft een eerste pass om bestanden te verwijderen en outputs naar nul om de overhead van het schrijven naar het scherm voor elk singe bestand te vermijden. Een tweede pass schoont dan de overgebleven directory structuur op:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Methode 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: gemiddeld 14.98 seconden
  • Methode 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: gemiddeld 12.82 seconden

Hier zijn de resultaten van een andere test met 404 MB van 19.521 bestanden in 3.243 mappen:

  • Methode 1: 2 minuten 20 seconden
  • Methode 2: 2 minuten 33 seconden

Er zit dus niet veel in, waarschijnlijk te dichtbij om op een enkele test te beoordelen.

  • *

Edit: Ik heb opnieuw getest met veel meer data, dit is een typisch geval voor mij: 28,3 GB met 1.159.211 bestanden in 146.918 mappen:

  • Methode 1: 2u 15m, 2u 34m: gemiddeld: 2 uur 25 minuten
  • Methode 2: 49m, 57m: gemiddeld: 53 minuten

Wow, methode 2 is bijna drie keer zo snel als methode 1! Ik zal mijn deletestuff.bat updaten!

18
18
18
2011-10-31 06:37:53 +0000

Als u regelmatig grote mappenstructuren moet verwijderen, kunt u overwegen om de root van die mappenstructuur op een aparte partitie op te slaan, en deze dan eenvoudigweg snel te formatteren wanneer u alles moet verwijderen. Als je dit moet automatiseren, kun je dit DOS commando gebruiken:

echo Y | format Z: /FS:NTFS /X /Q

waarbij Z: je ‘vluchtige’ partitie is. Opmerking: de partitie mag geen label hebben. Ik heb hierover geblogd hier .

9
9
9
2009-08-07 07:07:04 +0000

In opdrachtprompt (Start -> Uitvoeren -> cmd):

del /f /s /q foldername
7
7
7
2011-05-25 14:00:51 +0000

Naast het zeer snel kopiëren/verplaatsen van bestanden (met behulp van zijn eigen API), kan TeraCopy ook bestanden verwijderen en dat gaat ook zeer snel. Sinds ik TeraCopy heb ontdekt, gebruik ik geen computer meer zonder dat het geïnstalleerd is (als ik ga kopiëren/verplaatsen/verwijderen).

Hetzelfde installatieprogramma installeert x64 editie, maar om het te gebruiken moet je het handmatig forceren.

De beta die ik aanbeveel boven de stabiele versies: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
6
6
2012-02-09 17:35:24 +0000

Ik heb een bat bestand gemaakt dat hetzelfde doet.

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

het doet het werk in twee stappen, één, het probeert de bestanden te verwijderen. En de tweede is om te proberen het eigendom van de bestanden over te nemen. y moet worden gewijzigd volgens uw lokale (staat voor ja in het Engels). Als de taak mislukt (bijvoorbeeld als het mislukt vanwege toestemming) dan moet je het opnieuw uitvoeren. De tweede ronde zal echter niet proberen om de bestanden te verwijderen die in de eerste ronde zijn verwijderd, dus het zou vrij snel kunnen gaan.

  • *

Hoe te gebruiken. Sla het op als delfolder.bat in een pad route (bijvoorbeeld c:\windows), voer het dan uit als

delfolder "foldername"

waarbij foldernaam de naam is van de map

In mijn test duurde het verwijderen van 123'000 bestanden 3 minuten (sata 7200rpm). YAY!

4
4
4
2011-12-23 15:47:15 +0000

De onderstaande code werkt meestal goed voor mij.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
3
3
3
2009-08-07 07:09:35 +0000

Gebruik het rd /s commando vanaf de commando prompt.

2
2
2
2009-10-06 21:59:15 +0000

De beste praktische oplossing is waarschijnlijk om de map ergens uit de weg te ruimen (bijv. de prullenbak) en dan te beginnen met verwijderen. Dat duurt lang, maar dan is hij tenminste uit de weg.

Ik ben er vrij zeker van dat de tijd die nodig is om al die bestanden te verwijderen een inherente eis van de taak is, niet een inefficiëntie in de implementatie van het verwijderen.

1
1
1
2009-10-06 23:45:48 +0000

Installeer Cygwin en gebruik rm -r. Maar dat is waarschijnlijk overkill.

1
1
1
2011-05-31 12:40:36 +0000

Hebt u het genereren van korte bestandsnamen ingeschakeld? Zo ja, hebt u dat echt nodig? Het verwijderen van een bestand is alleen een metadata operatie. Dus als je twee keer zoveel namen te verwijderen hebt, is de hoeveelheid werk aanzienlijk groter.

0
0
0
2017-12-13 19:46:11 +0000

Het antwoord van Hugo is het snelst, maar het verwijdert geen verborgen of systeembestanden in de eerste keer, dus als je een meer complete oplossing wilt gebruik dan de parameter /a:

del /f /s /q /a foldername > nul
rmdir /s /q foldername

Over het BAT bestand van Magallanes , wees heel voorzichtig met takeown en icacls, want hardlinks delen dezelfde permissies en eigenaren, dus als er onverzadigde hardlinks zijn in de map die je wilt verwijderen, zal het gebruik van takeown en icacls de permissies en eigenaren van bestanden buiten de map veranderen.

Met behulp van het hulpprogramma ln.exe kunt u een lijst maken van alle bestanden met een hardlink in de map en weten of ze hardlinks hebben naar bestanden buiten de map (onverzadigde hardlinks):

ln.exe --enum foldername > HardlinksList.txt
0
0
0
2010-04-03 16:30:58 +0000

Heb je een van deze twee apps geprobeerd?

Zorg ervoor dat je het aantal overschrijfbewerkingen op 0 zet als je de snelste prestaties wilt. Doe dit door op options te klikken en dan de waarde onderin het dialoogvenster te veranderen.

Voer het te verwijderen pad in het veld Bron in en klik dan op Verwijderen.

Deze apps plaatsen de bestanden niet in de prullenbak. Wees er voorzichtig mee.

0
0
0
2017-06-15 12:00:52 +0000

Dit is bedoeld als aanvulling en vergroting van de stappen die in de eerder gegeven antwoorden zijn genomen.

De twee bovenstaande methoden lijken heel effectief, maar het is moeilijk om de prestaties te bepalen, tenzij ze onder exact dezelfde omstandigheden worden getest:

  • Fysieke harde schijf Device & Model
  • Bij voorkeur, ATTO / Crystal Disk gebenchmarkt voordat het klonen van de gegevens op hen
  • Dezelfde Partitie / Volume Location & Geometry
  • De manier om dit te doen zou zijn defrag het monster partitie / mappen en kloon ze precies zoals ze zijn 2 precies dezelfde soorten harde schijven (uit vorige stap)
  • Voer vervolgens de configuraties via Batch File en gebruik Powershell Cmdlet om te loggen en hun prestaties te meten.

  • De volgende zijn enkele voorbeeld mappen (genoemd als totale grootte) dat ik geëxperimenteerd op, maar was niet in staat om enige sluitende prestaties / resultaten te krijgen.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Ik zou de output Log files gepost hebben, maar ik geloof dat de variatie enorm is door de grootte & verdeling van de mappen bestanden etc.

Powershell:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
-1
-1
-1
2009-08-07 07:13:28 +0000

Het verwijderen van een map is sneller dan het verwijderen van meerdere bestanden.

Dus als je liever de muis gebruikt in plaats van command prompt, kun je een map maken, bestanden daarheen verplaatsen en die verwijderen (met Shift+Del zoals je zei).