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

Come posso cancellare tutti i file/sottocartelle in una determinata cartella tramite il prompt dei comandi?

Vorrei cancellare tutti i file e le sottocartelle in un file batch in Windows 7 e mantenere la cartella superiore. Sostanzialmente svuotando la cartella. Qual è l'istruzione da riga di comando per questo?

Risposte (11)

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

È possibile farlo utilizzando del e il flag /S (per dirgli di rimuovere tutti i file da tutte le sottodirectory):

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

La soluzione migliore: ad es. voglio cancellare tutti i file e le sottodirectory della directory principale, diciamo “C:\Utenti \Desktop \Nuova cartella \”. Il modo più semplice è creare un file batch di sotto di tre comandi.

cd C:\Users\Desktop\New folder\

del * /S /Q

rmdir /S /Q “C:\Users\Desktop\New folder\”

Qui prima pulirà tutti i file in tutte le sottodirectory e poi pulirà tutte le sottodirectory vuote. Poiché l'attuale directory di lavoro è la directory madre, cioè “\Nuova cartella”, il comando rmdir non può cancellare questa directory.

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

Passare alla directory principale:

pushd "Parent Directory"
``` ```
rd /s /q . 2>nul

Cancellare le sottocartelle:

&001

6
6
6
2015-04-27 07:21:36 +0000

è possibile utilizzare rmdir per cancellare i file e le sottocartelle, come questa:

rmdir /s/q MyFolderPath

Tuttavia, è molto più veloce, soprattutto quando si dispone di molte sottocartelle nella propria struttura per utilizzare del prima di rmdir, come questa:

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

Non dimenticare di usare i preventivi e per l’/q /s cancellerà tutti i repository e senza richiedere.

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

Se si desidera eliminare tutti i file in una cartella, comprese tutte le sottocartelle, e non ci si affida ad alcune condizioni di errore per mantenere intatta la cartella principale (come ho visto in un'altra risposta) si potrebbe avere un file batch come questo:

@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
    )

)

E poi lo si chiamerebbe semplicemente con:

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

Potete farlo rapidamente e facilmente inserendo queste tre istruzioni nel vostro file di bat:

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

Per eliminare file:

del PATH_TO_FILE
``` ```
rmdir /s /q PATH_TO_FOLDER

Per eliminare la cartella con tutti i file in essa contenuti:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"
``` ```
@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%

Per eliminare tutti i file da una specifica cartella (non eliminare la cartella stessa) è un po’ complicato. del /s *.* non può eliminare le cartelle, ma rimuove i file da tutte le sottocartelle. Quindi sono necessari due comandi:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
``` &001 


È possibile creare uno script per cancellare qualsiasi cosa si desideri (cartella o file) come questo `mydel.bat`: 


&001 &001 


Poche esempio di utilizzo: 


&001
1
1
1
2014-02-13 18:06:34 +0000

Questo funzionava meglio per me quando avevo degli spazi nei nomi delle cartelle.

@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 estava dolorosamente perto da solução, mas sabe o que dizem sobre fechar…

Para ser claro, rd /s /q c:\foobar apaga o directório de destino para além do seu conteúdo, mas nem sempre quer apagar o directório em si, por vezes só quer apagar o seu conteúdo e deixar o directório em paz. O comando deltree podia fazer isto, mas o Micrsoft, na sua infinita “sabedoria” removeu o comando e não o portou para o Windows.

Aqui está uma solução que funciona sem recorrer a ferramentas de terceiros. É provavelmente tão simples e eficiente quanto possível com um script de linha de comando, em vez de escrever um executável real. Não define nenhuma variável de ambiente e não utiliza nenhum loops. É também tão seguro quanto possível, com verificação de erros em todo o lado possível, e também tão fácil de usar quanto possível, com documentos integrados.

dt.bat (ou dt.cmd para as crianças; o que quer que seja, eu sou velho, eu uso .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

Aqui está como funciona:

  1. Verifica se um argumento de linha de comando foi passado, e imprime informação de utilização e sai se não for.
  2. Utiliza os pushd para guardar o directório actual, depois muda para o directório de destino, redireccionando quaisquer erros para nul para uma experiência de linha de comando mais limpa (e registos mais limpos).
  3. Verifica se o directório actual é agora o mesmo que o directório de destino, imprime uma mensagem de erro e sai do directório se não for. Isto evita apagar acidentalmente o conteúdo do directório anterior se o comando pushd falhar (por exemplo, o comando C:\Users\Bob Bobson\foobar não é compatível com o directório de destino), passando um directório inválido, erro de acesso, etc.)
  4. Esta verificação é insensível a maiúsculas e minúsculas, por isso é usualmente seguro no Windows, mas não é para sistemas de ficheiros sensíveis a maiúsculas e minúsculas como os utilizados pelos sistemas *nix, mesmo sob o Windows.
  5. Não funciona com nomes curtos (por exemplo, C:\Users\BobBob~1\foobar não será visto como sendo o mesmo que rd, mesmo que realmente o seja). É um pequeno inconveniente ter de usar o nome de ficheiro não curto, mas é melhor prevenir do que remediar, especialmente porque os SFNs não são completamente fiáveis ou sempre previsíveis (e podem até ser totalmente desactivados).
  6. Depois usa o nul para apagar o directório de destino e todo o seu conteúdo, redireccionando quaisquer erros (que devem existir pelo menos um para o próprio directório) para o popd. Algumas notas sobre isto:
  7. Porque o directório de destino é o directório actual, o sistema tem um ficheiro aberto e, portanto, não o pode apagar, pelo que permanece como está, que é o comportamento desejado.
  8. Porque só tenta remover o directório de destino depois de o seu conteúdo ter sido removido, deve agora estar vazio (para além de tudo o que também tenha pegas de ficheiro abertas).
  9. Finalmente, utiliza o rem para voltar ao directório anterior e terminar o script.

(Se quiser, pode comentar o script com as descrições acima usando :: ou &007.)

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

Questo è ciò che ha funzionato per me.

  1. 1. Navigare all'interno della cartella in cui si desidera eliminare i file.
  2. 3. del *
  3. Y per sì.
  4. Fatto