2010-08-09 16:42:36 +0000 2010-08-09 16:42:36 +0000
43
43
Advertisement

Hoe kan ik alle bestanden/submappen in een bepaalde map verwijderen via de opdrachtprompt?

Advertisement

Ik wil alle bestanden en submappen in een batchbestand in Windows 7 verwijderen en de bovenste map behouden. In principe wordt de map leeggemaakt. Wat is de opdrachtregelinstructie daarvoor?

Advertisement
Advertisement

Antwoorden (11)

54
54
54
2010-08-09 16:46:23 +0000

U kunt dit doen met behulp van del en de /S vlag (om het te vertellen dat alle bestanden uit alle submappen moeten worden verwijderd):

del /S C:\Path\to\directory\*
23
23
23
2013-10-05 04:44:01 +0000

De beste oplossing: ik wil bijvoorbeeld alle bestanden en submappen van de hoofddirectory verwijderen, laten we zeggen: “C: Gebruikers Bureaublad Nieuwe map”. De makkelijke manier is om een batch bestand te maken van onder drie commando’s.

cd C:\BureaubladNieuwe map

del * /S /Q

rmdir /S /Q “C:\BureaubladNieuwe map”

Hier zal het eerst alle bestanden in alle submappen opschonen en dan alle lege submappen opschonen. Aangezien de huidige werkmap de hoofdmap is, d.w.z. “Nieuwe map”, kan rmdir deze map niet zelf verwijderen.

9
Advertisement
9
9
2014-07-03 12:38:29 +0000
Advertisement

Navigeer naar de bovenliggende map:

pushd "Parent Directory"

Verwijder de submappen:

rd /s /q . 2>nul
6
6
6
2015-04-27 07:21:36 +0000

je kunt rmdir gebruiken om de bestanden en submap te verwijderen, zoals dit:

rmdir /s/q MyFolderPath

echter is het beduidend sneller, vooral wanneer je veel submappen in je structuur hebt om del te gebruiken voor de rmdir, zoals dit:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath
5
Advertisement
5
5
2013-07-31 18:23:00 +0000
Advertisement
rmdir "c:\pathofyourdirectory" /q /s

Vergeet niet de aanhalingstekens te gebruiken en voor de /q /s zal het alle opslagplaatsen verwijderen en zonder aanmaning.

3
3
3
2014-02-05 16:39:49 +0000

Als je alle bestanden in een map wilt verwijderen, inclusief alle submappen en niet wilt vertrouwen op enkele foutcondities om de hoofdmap intact te houden (zoals ik in een ander antwoord zag) kun je een batchbestand als dit hebben:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

En dan zou je het gewoon aanroepen met:

empty_my_folder.bat "C:\whatever\is\my folder"
3
Advertisement
3
3
2017-02-02 19:20:53 +0000
Advertisement

U kunt het snel en eenvoudig doen door deze drie instructies in uw vleermuisbestand op te nemen:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder
1
1
1
2016-11-10 17:16:53 +0000

Bestand verwijderen:

del PATH_TO_FILE

Het verwijderen van alle bestanden uit een specifieke map (niet het verwijderen van de map zelf) is een beetje gecompliceerd. del /s *.* kan geen mappen verwijderen, maar verwijdert bestanden uit alle submappen. Er zijn dus twee commando’s nodig:

rmdir /s /q PATH_TO_FOLDER

Je kunt een script maken om te verwijderen wat je maar wilt (map of bestand) zoals dit mydel.bat:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Weinig voorbeeld van gebruik:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%
1
Advertisement
1
1
2014-02-13 18:06:34 +0000
Advertisement

Dit werkte beter voor mij toen ik spaties had in de mapnamen.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo ***Deleting all files, including the ones in the subdirs, without confirmation*** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\." (
    echo ***Cleaning out folder: %~1*** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)
0
0
0
2020-02-17 22:41:30 +0000

user340956 was pijnlijk dicht bij de oplossing, maar je weet wat ze zeggen over sluiten…

Om duidelijk te zijn, rd /s /q c:\foobar verwijdert de doelmap naast de inhoud ervan, maar je wilt niet altijd de map zelf verwijderen, soms wil je gewoon de inhoud ervan verwijderen en de map met rust laten. Het deltree commando kan dit doen, maar Micrsoft heeft in zijn oneindige “wijsheid” het commando verwijderd en niet geporteerd naar Windows.

Hier is een oplossing die werkt zonder gebruik te maken van gereedschappen van derden. Het is waarschijnlijk zo eenvoudig en efficiënt mogelijk met een commandoregel-script in plaats van het schrijven van een echte uitvoerbare versie. Het stelt geen omgevingsvariabelen in en gebruikt geen lussen. Het is ook zo veilig als maar kan, met foutcontrole overal waar mogelijk, en ook zo gebruiksvriendelijk mogelijk, met ingebouwde docs.

dt.bat (of dt.cmd voor de kinderen; wat dan ook, ik ben oud, ik gebruik .bat ):

:: dt is a Windows-compatible version of the deltree command
:: Posted to SuperUser by Synetech: https://superuser.com/a/1526232/3279

@echo off
goto start

:start
    if ["%~1"]==[""] goto usage
    pushd "%~1" 2>nul
    if /i not ["%cd%"]==["%~1"] goto wrongdir
    rd /s /q "%~1" 2>nul
    popd
goto :eof

:usage
    echo Delete all of the contents of a directory
    echo.
    echo ^> %0 DIR
    echo.
    echo %0 is a substitute for deltree, it recursively deletes the contents
    echo (files and folders) of a directory, but not the directory itself
    echo.
    echo DIR is the directory whose contents are to be deleted
goto :eof

:wrongdir
    echo Could not change to the target directory. Invalid directory? Access denied?
goto :eof
  1. Het controleert of een command-line argument is gepasseerd, en drukt gebruiksinformatie af en sluit af als dat niet het geval is.
  2. 2. Het gebruikt pushd om de huidige directory op te slaan, en schakelt dan over naar de doelmap, waarbij eventuele fouten worden omgeleid naar nul voor een schonere command-line ervaring (en schonere logs).
  3. Het gebruikt pushd om de huidige directory op te slaan, en schakelt dan over naar de doelmap, waarbij eventuele fouten worden omgeleid naar C:\Users\Bob Bobson\foobar voor een schonere command-line ervaring (en schonere logs). Het controleert of de huidige directory nu hetzelfde is als de doelmap, en drukt een foutmelding af en sluit af als dat niet het geval is. Dit voorkomt dat de inhoud van de vorige map per ongeluk wordt gewist als het C:\Users\BobBob~1\foobar commando mislukt is (bijv,
  4. Deze controle is hoofdlettergevoelig, dus het is gewoonlijk veilig op Windows, maar niet voor hoofdlettergevoelige bestandssystemen zoals die gebruikt worden door *nix systemen, zelfs niet onder Windows.
  5. Het werkt niet met korte bestandsnamen (b.v. rd zal niet gezien worden als hetzelfde als nul, zelfs niet als ze dat wel zijn). Het is een klein ongemak om de niet-korte bestandsnaam te moeten gebruiken, maar het is beter veilig dan sorry, vooral omdat SFN’s niet volledig betrouwbaar of altijd voorspelbaar zijn (en misschien zelfs helemaal uitgeschakeld zijn).
  6. Het gebruikt dan popd om de doelmap en al zijn inhoud te verwijderen, waarbij eventuele fouten (die er op zijn minst één zouden moeten zijn voor de map zelf) worden omgeleid naar rem. Enkele opmerkingen hierover:
  7. Omdat de doelmap de huidige map is, heeft het systeem er een open bestandshandvat naartoe, en kan het dus eigenlijk niet verwijderen, dus het blijft zoals het is, wat het gewenste gedrag is.
  8. Omdat het de doelmap pas probeert te verwijderen nadat de inhoud ervan is verwijderd, zou deze nu leeg moeten zijn (anders dan alles wat ook open bestandshandvatten heeft).
  9. Tenslotte gebruikt het :: om terug te keren naar de huidige map en eindigt het script.

(Als je wilt, kun je het script becommentariëren met de bovenstaande beschrijvingen met behulp van &007 of &007).

0
0
0
2018-05-07 18:43:18 +0000

Dit is wat voor mij werkte.

  1. 1. Navigeer in de map waar je de bestanden wilt verwijderen.
  2. Type: del *
  3. Y voor ja.
  4. Gedaan
Advertisement

Gerelateerde vragen

3
19
10
28
3
Advertisement