Hur man tar bort tomma mappar automatiskt i Windows

Med tiden kan hundratals tomma mappar och skräpfiler ta upp din hårddisk. Medan skräpfilerna upptar diskutrymme och kan rensas med inställningar för Diskrensning eller lagring, kvarstår de tomma katalogerna.

De tomma mapparna tar inte ut diskutrymme, men för att organisera dina data bättre kanske du vill beskära dem då och då.

Den här artikeln diskuterar olika metoder för att hitta och ta bort tomma mappar på din dator.

Hur hittar och tar jag bort tomma mappar i Windows?

En tom mapp eller katalog är en som inte har någon fil eller underkatalog i den. Tömmappar tar inget diskutrymme, men för många av dem kan vara en olägenhet. Använd en av metoderna nedan för att hitta och ta bort dem.

Viktigt: Att köra ett automatiskt verktyg eller en batchfil för att ta bort tomma mappar i hela systemenheten rekursivt rekommenderas vanligtvis inte. Det beror på att vissa program inte fungerar och kastar ett bisarrt fel när en viktig mapp saknas. Som alltid gäller standardvarningen. Se till att ha lämpliga säkerhetskopior helst på en extern enhet innan du manipulerar med filsystemet eller Windows-registret.

RELATERADE: Hitta och ta bort 0-byte-filer rekursivt i en mapp i Windows

Låt oss börja med ett snyggt GUI-verktyg, följt av inbyggda kommandorad och skriptmetoder.

1. Ta bort tomma mappar med hjälp av verktyget "Hitta tomma filer-n-mappar"

Hitta tomma filer-n-mappar är ett utmärkt verktyg som kan hitta och ta bort tomma filer (0-byte) och tomma mappar rekursivt under ett mappträd.

Ladda ner Find Empty Files-n-Folders (600KB installationsprogram) från Ashisoft.com.

Välj mappen och klicka på Skanna nu.

Verktyget visar tomma filer och mappar i separata flikar.

Klicka på Markera alla mappar och klicka sedan på Radera mappar .

På samma sätt, för att ta bort 0-byte-filerna i det valda mappträdet, klicka på fliken Tomma filer .

Ashisoft.com har andra fantastiska verktyg som du kan kolla in!


2. Ta bort tomma mappar med kommandona “för” och “rd”

Du kan använda kommandotolken interna kommandon for och rd att räkna upp listan över mappar och radera de tomma.

  1. Håll Shift-tangenten intryckt, högerklicka på en mapp och klicka på Öppna kommandofönstret här. Detta öppnar Kommandotolken vid den aktuella mappplatsen, vilket också kan verifiera i konsolen. Obs: Du måste se till att du kör följande kommando från den exakta sökvägen för överordnad mapp där du behöver hitta och ta bort tomma undermappar.
  2. När du är i önskad katalog i kommandotolken, kör denna kommandorad:
     för / f "delims ="% i i ('dir / s / b / ad ^ | sort / r') do rd "% i" 2> NUL 

    Detta raderar alla tomma kataloger över underkataloger från basmappens sökväg, inklusive kapslade tomma mappar.

Ovanstående kommandorad med tillstånd av Raymond Chen från Microsoft via sin blogg The Old New Thing. I det här inlägget har Raymond's kommandorad ändrats något så att den också tar bort mappnamn som innehåller utrymme.

Hur fungerar kommandot

Ovanstående kommando listar alla underkataloger (rekursivt) i den aktuella basvägen och sorterar listan ( sort /r ) i omvänd ordning. Den omvända ordningen är att se till att uppräkningen sker nedifrån och upp. Detta är viktigt för att ta bort tomma kataloger, eftersom du måste ta bort underkatalogerna innan du tar bort överordnade.

Sedan försöker man ta bort listan över kataloger (i omvänd sorteringsordning) med RD kommandot. Om en katalog inte är tom fortsätter den till nästa katalog och så vidare. Kommandot 2>NUL säkerställer att utmatningstexten "katalogen inte tom" undertrycks.

Den enda nackdelen med ovanstående metod är att det inte hjälper om du bara vill hitta tomma mappar utan att ta bort dem. Om du vill hitta listan med tomma mappar använder du kommandoraden i avsnittet nedan eller följer någon annan metod som beskrivs i den här artikeln.

Hitta tomma mappar, men ta inte bort

Om du bara vill hitta de tomma mapparna utan att ta bort dem använder du den här kommandoradsyntaxen:

 för / r "D: \ uploads \ 2019" / d% F in (.) do @dir / b "% F" | findstr "^"> nul || eko% ~ fF 

Det visar dig utgången som innehåller listan med tomma kataloger.

Låt oss säga att du har tomma kapslade mappar så här:

 C: \ 1 └───2 └───3 └───4 

Om du kör ovanstående kommando listas bara den djupaste tomma mappen → 4 . Tekniskt är det korrekt eftersom en mapp inte kan betraktas som tom om det finns en undermapp eller en fil i den.


3. Hitta och ta bort tomma mappar med Robocopy-kommandot

Robocopy är ett kraftfullt inbyggt filkopieringsverktyg som har många avancerade funktioner. Vi har behandlat Robocopy i artikeln Jämför innehållet i två mappar i Windows.

Låt oss anta att du har en mapp som heter cars som innehåller flera undermappar varav vissa är tomma. Vi kommer att ta bort de tomma med Robocopy.

Tricket här är att använda Robocopy-flyttningskommandot och passera exakt samma mappväg för både källa och destination.

  1. Öppna ett kommandotolk-fönster
  2. Skriv in följande kommando och tryck ENTER:
     robocopy "d: \ bilpriser \ bilar" "d: \ bilpriser \ bilar" / S / flytta 

    Det viktigaste att notera här är att käll- och destinationsvägarna är (medvetet) desamma. Parametern /S instruerar Robocopy att inte flytta tomma mappar till "destinations" -vägen. Eftersom vi har nämnt samma vägar för källa och destination, kommer Robocopy helt enkelt att ta bort de tomma mapparna på grund av närvaron av /S switch.

De tomma mapparna i den valda sökvägen rensas nu.

Vill du hitta tomma mappar men inte ta bort dem?

Du kan använda kommandoradsargumentet /L (endast listan) med Robocopy så att det bara utför en torrkörning istället för att utföra den faktiska kopierings- / flyttoperationen.

/L :: Endast lista - kopiera inte, tidsstämpla eller ta bort några filer.

/MOVE :: MOVE files AND dirs (radera från källan efter kopiering).

/S :: kopiera underkataloger, men inte tomma.

Du kan se antalet filer i en kolumn höra mappens sökväg. 0 erna betyder att mappen inte har några filer.

Låt oss sätta detta kommando till ett riktigt test!

Min %APPDATA% mapp är full av tomma mappar tillagda av program som är föråldrade.

Innan rensningen hade mappen Appdata \ Roaming 681 mappar, som ses i mappegenskaperna.

Jag öppnade kommandotolken och körde följande kommando:

 robocopy "% appdata%" "% appdata%" / S / MOVE 

Obs: miljövariabeln% appdata% översätts till C:\Users\{username}\AppData\Roaming mapp. Du kan använda hela mappvägen eller motsvarande miljövariabel med Robocopy. Vilket som blir bra.

Det har lyckats ta bort 94 tomma mappar i min %APPDATA% mapp och undermappar.

Redaktörens anmärkning: I kommandoradsutgången under statistikavsnittet dök upp följande fel:

“FEL 32 (0x00000020) Radera källkatalog C: \ Användare \ ramesh \ AppData \ Roaming \

Processen har inte åtkomst till filen eftersom den används av en annan process. "

Eftersom vi har instruerat Robocopy att flytta ( /MOVE ) katalogen% APPDATA%, försökte verktyget att rensa upp "källkod" -mappen efter att "flytta" den till destinationen. Det kunde inte, eftersom% APPDATA% är en speciell mapp. Felet uppstår inte när en katalogväg används som inte är en speciell mapp. Eftersom allt gick bra, ignorerade jag helt enkelt det (triviala) felet.


4. Hitta och ta bort tomma mappar med PowerShell

Följande PowerShell-kommandorad raderar tomma mappar som finns under den angivna basmappen rekursivt.

  1. Starta PowerShell och skriv följande kommando:
     (gci "folderpath" -r |? {$ _. PSIsContainer -ekv $ True}) | ? {$ _. GetFileSystemInfos (). Räkna -ek 0} | ta bort sak 

    Byt ut "mappbana" med platsen för basmappen. Till exempel anger jag Roaming- mappen här:

     (gci "C: \ Användare \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Räkna -ek 0} | ta bort sak 

    Detta raderar alla tomma undermappar under min %appdata% rekursivt och visar inte någon utgång, såvida det inte stöter på några fel.

Observera att PowerShell-kommandot ovan rensar endast den sista nivån i tom kapslad mapp. Låt oss till exempel säga att du har tomma kapslade mappar så här:

 C: \ 1 └───2 └───3 └───4 

Att köra kommandot ovan rensar den djupaste tomma mappen → 4 . Att köra skriptet igen kommer att rensa en annan nivå i en kapslad mapp ( 3 ), och så vidare.

Du kan använda PowerShell-skriptet på Svendsen Tech PowerShell Wiki för att arbeta med kapslade mappar.

Alternativt kan du använda nästa metod, en Windows-skriptlösning för att rensa alla tomma mappar inklusive kapslade rekursivt.

Hitta tomma mappar, men vill inte ta bort dem?

Vill du få en lista med tomma mappar, men vill inte ta bort dem? Använd det här kommandoradsexemplet istället:

 (gci "C: \ Användare \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Räkna -ek 0} | välj FullName | Out-Gridview 

Kommandot matar ut listan med tomma mappar med fullständiga sökvägar till en rutnätvisningskontroll.

Tips: I rutnätsvyn kan du välja alla och kopiera markeringen genom att trycka på Ctrl + C

Det är en bra idé att förhandsgranska listan innan du kör kommandot för att ta bort mapparna.


5. Hitta och ta bort tomma mappar med Windows Scripting

Microsofts anställd Jeremy Jameson skrev ett VBScript som tar bort tomma mappar rekursivt. Jag har lagt till fler rader i skriptet så att det tvingas ta bort tomma skrivskyddskataloger, mata ut den aggregerade listan med tomma mappar. Den matar också ut listan med tomma mappar som inte kunde raderas, tillsammans med motsvarande felbeskrivning.

Skriptet kan ta bort kapslade tomma kataloger över undermappar.

 Alternativ explicit if (WScript.Arguments.Count 1) Sedan WScript.Echo ("Användning: cscript DeleteEmptyFolders.vbs {path}") WScript.Quit (1) Avsluta om Dim strPath: strPath = WScript.Arguments (0) Dim fso: Ställ in fso = CreateObject ("Scripting.FileSystemObject") Dim objFolder: Ställ objFolder = fso.GetFolder (strPath) Dim sDelList, sDelErr, sFolderPath Dim iCnt iCnt = 0 DeleteEmptyFolders objFolder Sub DeleteEmpt Felsökare vid åtkomst till korsningar etc. För varje undermapp i mappen.SubFolders DeleteEmptyFolders undermapp Nästa på fel Gör 0 Om folder.SubFolders.Count = 0 Och folder.Files.Count = 0 Sedan sFolderPath = folder.Path On Error Återställ nästa fso.DeleteFolder mapp .Path, True If Err.number 0 Sedan sDelErr = sDelErr & Err.number & ":" & Err.description & _ vbCrLf & sFolderPath & vbCrLf & vbCrLf Else sDelList = sDelList & vbCrLf & sCnol t = iCnt + 1 End If On Error Goto 0 End If End Sub If sDelList = "" And sDelErr = "" Sedan WScript.Echo "Inga tomma mappar hittade under" & _ "" "" & strPath & "" " & "träd" WScript.Quit Avsluta Om sDelList "" då sDelList = "Lista över tomma mappar raderade" & vbCrLf _ & String (38, "-") & vbCrLf & sDelList & vbCrLf & _ vbCrLf & "Totalt:" & iCnt & "mappar raderade." Om sDelErr "" så sDelErr = "Dessa mappar kunde inte tas bort" & _ vbCrLf & String (45, "-") & vbCrLf & sDelErr WScript.Echo sDelList & vbCrLf & vbCrLf & sDelErr 

Kopiera koden ovan till Notepad och spara filen med en .vbs- förlängning, säg delempty.vbs .

Du kan köra skriptet på två sätt:

via Command Prompt, genom att köra:

 cscript.exe delempty.vbs "folder_path" 

via GUI, genom att köra:

 wscript.exe delempty.vbs "folder_path" 

via menyn Skicka till

Du kan skapa en genväg till skriptet i din SendTo-mapp och namnge den som Radera tomma mappar .

Högerklicka sedan på en mapp där du vill ta bort tomma undermappar rekursivt → klicka på Skicka till → klicka på Radera tomma mappar i menyn Skicka till.

Du kommer att se listan med tomma mappar raderade och det totala, och mappar som inte kunde raderas med respektive felkoder.

Det är allt! Om du känner till andra metoder för att ta bort tomma mappar i Windows, låt oss veta det i kommentaravsnittet nedan.

Relaterade Artiklar