Hoe op te lossen “De map is niet leeg” Fout bij het uitvoeren van RMDIR-opdracht in een batchscript?

Ik maak een batch-script en een deel van het script probeert een map en al zijn submappen te verwijderen. Ik krijg een intermitterende fout over een submap die niet leeg is. Ik lees een artikel over indexering als de schuldige. Ik heb Wsearch uitgeschakeld, maar ik kreeg uiteindelijk weer de fout. Dit is de opdracht:

rmdir /S /Q "C:\<dir>\"

Antwoord 1, Autoriteit 100%

Ik heb dezelfde problemen ervaren als Harry Johnston heeft genoemd. rmdir /s /qzou klagen dat een map niet leeg was, hoewel /sis bedoeld om het legen voor u te doen! Ik denk dat het persoonlijk een bug in Windows is.

Mijn oplossing is op delalles in de map voordat u de map zelf verwijdert:

del /f /s /q mydir 1>nul
rmdir /s /q mydir

(De 1>nulVerbergt de standaarduitgang van delomdat anders het enkele bestand vermeldt dat het wordt verwijderd.)


Antwoord 2, Autoriteit 49%

Ik ben bekend met dit probleem. De eenvoudigste oplossing is om de bewerking voorwaardelijk te herhalen. Ik heb het nog nooit twee keer op een rij gefaald – tenzij er eigenlijk een open bestand is of een probleem met de machtigingen, uiteraard!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme

Antwoord 3, Autoriteit 23%

Ik heb net hetzelfde probleem aangemeld en het had te maken met sommige bestanden die worden verloren of beschadigd. Om het probleem te verhelpen, voert u cheque-schijf uit:

chkdsk /F e:

Dit kan worden uitgevoerd vanuit het vak Zoeken Windows of vanaf een CMD-prompt. De /FFixeert eventuele problemen die het vindt, zoals het herstellen van de bestanden. Zodra dit is voltooid, kunt u de bestanden en mappen zoals normaal verwijderen.


Antwoord 4, autoriteit 18%

voer de opdrachtprompt in als beheerder en voer het uit

rmdir /s <FOLDER>

Antwoord 5, autoriteit 7%

Ik had een soortgelijk probleem, ik probeerde een lege map te verwijderen via Windows Verkenner. Liet me de niet-lege fout zien, dus ik dacht dat ik het via admin cmd probeerde, maar geen van de antwoorden hier hielp.

Nadat ik een bestand naar de lege map heb verplaatst. Ik heb de niet-lege map kunnen verwijderen


Antwoord 6, autoriteit 3%

Zoals @gfullam aangaf in een reactie op het antwoord van @BoffinbraiN, is de <dir>die u zelf verwijdert misschien niet degene die bestanden bevat: er kunnen submappen zijn in <dir>die het bericht “De map is niet leeg” krijgen en de enige oplossing zou dan zijn om recursief de mappen te doorlopen, waarbij alle bestanden die erin staan handmatig worden verwijderd… Ik heb uiteindelijk besloten om een poort van rmvan UNIX. rm.exewordt geleverd met Git Bash, MinGW, Cygwin, GnuWin32 en andere. U hoeft alleen de bovenliggende map in uw PATH te hebben en vervolgens uit te voeren zoals u zou doen in een UNIX-systeem.

Batchscript voorbeeld:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"

Antwoord 7, autoriteit 3%

Ik had “C:\Users\User Name\OneDrive\Fonts”, dat was gelinkt ( /D ) naar “C:\Windows\Fonts”, en ik kreeg hetzelfde probleem. In mijn geval

cd “C:\Gebruikers\Gebruikersnaam\OneDrive”

rd /s-lettertypen

Y (om de actie te bevestigen)

heeft me geholpen. Ik hoop dat het jou ook helpt ;D


Antwoord 8, autoriteit 2%

In mijn geval heb ik de map zo naar de hoofdmap verplaatst.

move <source directory> c:\

En voerde toen de opdracht uit om de map te verwijderen

rmdir c:\<moved directory> /s /q

Antwoord 9, autoriteit 2%

Wat voor mij werkte, is het volgende. Het lijkt alsof het RMDir-commando bijna altijd “De map is niet leeg” geeft…

:Cleanup_Temporary_Files_and_Folders
Erase /F /S /Q C:\MyDir
RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders

Antwoord 10

De reden waarom rd /sweigert bepaalde bestanden te verwijderen, is hoogstwaarschijnlijk te wijten aan ALLEEN-LEESEN bestandskenmerken op bestanden in de map.

De juiste manier om dit op te lossen, is ervoor te zorgen dat u eerst de kenmerken van alle bestanden opnieuw instelt:

attrib -r %directory% /s /d
rd /s %directory%

Er kunnen andere zijn, zoals verborgen of systeembestanden, dus als je op veilig wilt spelen:

attrib -h -r -s %directory% /s /d
rd /s %directory%

Antwoord 11

Vergelijkbaar met het antwoord van Harry Johnston, loop ik door totdat het werkt.

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)

Antwoord 12

Ik kan de volgende mogelijke oorzaken bedenken:

  1. er zijn bestanden of submappen die hogere rechten nodig hebben
  2. er zijn bestanden in gebruik, niet alleen door WSearch, maar misschien ook door uw virusscanner of iets anders

Voor 1.) kunt u runas /user:Administratorproberen om hogere privileges te krijgen of het batchbestand starten als beheerder via het contextmenu. Als dat niet helpt, heeft misschien zelfs de beheerder niet de rechten. Dan moet u het eigendom van de directory overnemen.

Voor 2.) download Procesverkenner, klik op Find/Find handle or DLL...of druk op Ctrl+F, typ de naam van de directory en zoek uit wie deze gebruikt. Sluit indien mogelijk de applicatie die de directory gebruikt.


Antwoord 13

Windows is soms “gebroken door ontwerp”, dus u moet een lege map maken en vervolgens de “gebroken map” spiegelen met een “lege map” met back-upmodus.

robocopy - cmd copy utility
/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans

Maak een lege map als volgt aan:

mkdir empty

overschrijf de kapotte map met leeg als volgt:

robocopy /copyall /mir /b empty broken

en verwijder vervolgens die map

rd broken /s
rd empty /s

Als dit niet helpt, probeer dan opnieuw op te starten in “herstelmodus met opdrachtprompt” door shift ingedrukt te houden wanneer u op opnieuw opstarten klikt en probeer deze opdracht opnieuw uit te voeren in herstelmodus

Other episodes