2013-01-17 15:33:22 +0000 2013-01-17 15:33:22 +0000
59
59

Verwijder een map in Windows volledig met behulp van opdrachtregel

Ik moet een map verwijderen die andere mappen en bestanden bevat. Ik heb del en rmdir commando’s geprobeerd, maar soms lukt het niet met enkele foutregels: [PATH]: The directory isn't empty.

Is er een goed alternatief?

Antwoorden (8)

58
58
58
2013-01-17 15:38:19 +0000

Probeer:

rmdir /S your_directory

of:

rmdir /S /Q your_directory

om bevestigingsberichten over te slaan.

16
16
16
2013-07-16 16:23:26 +0000

Dit overkomt mij veel met mijn geautomatiseerde build scripts.

De reden zou kunnen zijn dat er een applicatie is die een bestand open heeft staan in die directory met “share delete”. D.w.z. de applicatie staat een verwijdering van het bestand toe (daarom denk ik dat de DeleteFile call niet mislukt), maar het bestand zal pas verdwijnen nadat de applicatie zijn handvat heeft gesloten.

Dat betekent dat het bestand er misschien nog steeds is als het rmdir commando de map probeert te verwijderen, vandaar de foutmelding. Kort daarna zal de genoemde applicatie het handvat sluiten, het bestand zal verdwijnen, en als je de map inspecteert om te zien welk bestand rmdir er over sprak zal het leeg zijn.

Dat is tenminste mijn theorie.

De door Harry Johnston voorgestelde workaround ziet er goed uit. Alleen zou ik een pauze inlassen tussen de rmdir commando’s. Natuurlijk heeft Windows geen gemakkelijk te scripten “pauze” commando (correctie: oude Windows versies niet, nieuwere hebben - zie commentaar). Maar als seconden granulariteit genoeg is kan men ping gebruiken om een pauze te maken:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Dus in totaal:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}
11
11
11
2013-01-17 16:27:07 +0000

U kunt een aantal alleen-lezen bestanden hebben, u kunt de del /F optie gebruiken om ze te verwijderen met behulp van

del /S /F your_directory
     rmdir your_directory

U kunt ook een aantal verborgen bestanden hebben en als u echt zeker weet dat u ze wilt verwijderen, dan kunt u dit doen met behulp van

del /S /F /AH your_directory
     rmdir your_directory

Als dit nog steeds niet lukt, dan heeft u ofwel geen toestemming om sommige bestanden te verwijderen, of sommige van de bestanden zijn nog steeds in gebruik.

5
5
5
2013-01-17 22:34:36 +0000

Ik geloof dat er een bug is in Windows 7 (en misschien andere versies) die dit symptoom soms veroorzaakt; of het kan een bug zijn in software van derden. (Heeft u toevallig Symantec Endpoint Protection geïnstalleerd?)

Hoe dan ook, ik ben het vrij vaak tegengekomen. In de meeste gevallen kan het probleem worden opgelost door rd /s /q twee of drie keer achter elkaar uit te voeren.

Als dit in een batch-bestand zit, kun je zoiets doen als dit:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
3
3
3
2013-01-17 15:36:33 +0000

Gebruik del op de bestanden binnenin, dan rmdir om de map te verwijderen.

Om de rmdir methode te gebruiken om ook alle bestanden te verwijderen, gebruik je de /S schakelaar voor de mapnaam, en /Q om de prompt voor het verwijderen te onderdrukken. Dit is de beste manier om het te doen, aangezien je geen enkel bestand mist. Wees echter voorzichtig met het gebruik van de /Q switch, aangezien deze u niet zal waarschuwen voor Systeem- of Verborgen bestandsattributen

2
2
2
2017-12-01 18:08:45 +0000

Als u node gebruikt, kunt u de rimraf afhankelijkheid als volgt gebruiken:

uitvoeren installatie: npm install rimraf -g

** verwijderen map:** rimraf SourceFolder

Dit hielp me bij het krijgen van de fout:

de bron bestandsnamen zijn groter dan wordt ondersteund door het bestandssysteem

0
0
0
2015-11-16 14:47:29 +0000

Ik denk dat je het zo kunt gebruiken:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"
0
0
0
2016-06-24 18:30:12 +0000

Map oudere versies van Windows (DOS, Windows 95/98/ME), DELTREE is het equivalent van RM of RMDIR. Ik gebruik DELTREE op mijn Windows 7 werkstation in batch bestanden.

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.