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

Jak mogę usunąć wszystkie pliki/podfoldery w danym folderze za pomocą wiersza poleceń?

Chciałbym usunąć wszystkie pliki i podfoldery w pliku wsadowym w systemie Windows 7 i zachować górny folder. Zasadniczo opróżnianie folderu. Jaka jest do tego instrukcja linii poleceń?

Odpowiedzi (11)

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

Możesz to zrobić za pomocą del i flagi /S (aby powiedzieć jej, aby usunęła wszystkie pliki z wszystkich podkatalogów):

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

Najlepsze rozwiązanie: np. chcę usunąć wszystkie pliki i podkatalogi z katalogu nadrzędnego powiedzmy “C:\Użytkownicy Pulpitu, nowy folder\”. Prostym sposobem jest utworzenie pliku wsadowego składającego się z poniżej trzech poleceń.

cd C:\Użytkownicy \Desktop \Nowy folder \

del * /S /Q

rmdir /S /Q “C:\Desktop \Nowy folder \”

W tym miejscu najpierw wyczyści wszystkie pliki we wszystkich podkatalogach, a następnie wyczyści wszystkie puste podkatalogi. Ponieważ aktualny katalog roboczy jest katalogiem macierzystym, tzn. “Nowy folder”, polecenie rmdir nie może usunąć tego katalogu samodzielnie.

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

Przejdź do katalogu nadrzędnego:

pushd "Parent Directory"

Usuń podkatalogi:

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

możesz użyć rmdir do usunięcia plików i podfolderów, w następujący sposób:

rmdir /s/q MyFolderPath

Jednakże, jest to znacznie szybsze, zwłaszcza gdy masz wiele podfolderów w swojej strukturze, aby użyć del przed rmdir, w następujący sposób:

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

Nie zapomnij użyć cudzysłowów i dla /q /s usunie wszystkie repozytoria i to bez podpowiedzi.

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

Jeśli chcesz usunąć wszystkie pliki w folderze, w tym wszystkie podfoldery, a nie polegać na pewnych warunkach błędu, aby utrzymać folder główny w stanie nienaruszonym (jak widziałem w innej odpowiedzi), możesz mieć plik wsadowy taki jak:

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

)

I wtedy po prostu nazwiesz go:

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

Możesz to zrobić szybko i łatwo, umieszczając te trzy instrukcje w swoim pliku nietoperza:

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

Aby usunąć plik:

del PATH_TO_FILE

Aby usunąć folder z wszystkimi plikami w nim zawartymi:

rmdir /s /q PATH_TO_FOLDER

Aby usunąć wszystkie pliki z określonego folderu (nie usunąć sam folder) jest to trochę skomplikowane. del /s *.* nie może usunąć folderów, ale usuwa pliki ze wszystkich podfolderów. Potrzebne są więc dwa polecenia:

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

Możesz stworzyć skrypt, który usunie wszystko co chcesz (folder lub plik) w ten sposób mydel.bat:

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

Niewielki przykład użycia:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder
1
1
1
2014-02-13 18:06:34 +0000

To działało lepiej dla mnie, gdy miałem miejsca w nazwach folderów.

@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 był boleśnie blisko rozwiązania, ale wiesz, co mówią o bliskości…

Aby było jasne, rd /s /q c:\foobar kasuje katalog docelowy oprócz jego zawartości, ale nie zawsze chcesz usunąć sam katalog, czasami po prostu chcesz usunąć jego zawartość i zostawić go w spokoju. Polecenie deltree mogłoby to zrobić, ale Micrsoft w swojej nieskończonej “mądrości” usunął to polecenie i nie przeportował go do systemu Windows.

Oto rozwiązanie, które działa bez uciekania się do narzędzi innych firm. Prawdopodobnie jest ono tak proste i efektywne, jak to tylko możliwe przy użyciu skryptu z linią poleceń, zamiast pisania prawdziwego pliku wykonywalnego. Nie ustawia on żadnych zmiennych środowiskowych i nie używa żadnych pętli. Jest także tak bezpieczny, jak to tylko możliwe, z możliwością sprawdzania błędów wszędzie tam, gdzie to możliwe, a także tak przyjazny dla użytkownika, jak to tylko możliwe, z wbudowanymi dokumentami.

dt.bat (lub dt.cmd dla dzieci; cokolwiek, jestem stary, używam .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

Oto jak to działa:

  1. Sprawdza, czy argument linii poleceń został przekazany, i drukuje informacje o użyciu, a jeśli nie, to kończy pracę.
  2. Używa pushd do zapisania aktualnego katalogu, a następnie przełącza się do katalogu docelowego, przekierowując wszelkie błędy do nul w celu uzyskania czystszego doświadczenia z linią poleceń (i czystszych logów).
  3. Sprawdza, czy aktualny katalog jest teraz taki sam, jak katalog docelowy, i wypisuje komunikat o błędzie i kończy pracę, jeśli nie jest. Pozwala to uniknąć przypadkowego skasowania zawartości poprzedniego katalogu, jeśli polecenie pushd nie powiodło się (np, Przekazywanie nieprawidłowego katalogu, błąd dostępu, itp.)
  4. To sprawdzenie nie uwzględnia wielkości liter, więc jest usualnie bezpieczne w systemie Windows, ale nie jest przeznaczone dla systemów plików wrażliwych na wielkość liter, takich jak te używane przez systemy *nix, nawet pod Windows.
  5. Nie działa w przypadku nazw plików krótkich (np. C:\Users\Bob Bobson\foobar nie będzie postrzegane jako takie same jak C:\Users\BobBob~1\foobar, nawet jeśli są one rzeczywiście). Niewielką niedogodnością jest konieczność używania nie-krótkich nazw plików, ale jest to bardziej bezpieczne niż przykre, zwłaszcza, że SFN-y nie są całkowicie niezawodne lub zawsze przewidywalne (a nawet mogą być całkowicie wyłączone).
  6. Następnie używa rd do usunięcia katalogu docelowego i całej jego zawartości, przekierowując wszelkie błędy (które powinny być przynajmniej jedno dla samego katalogu) do nul. Kilka uwag na ten temat:
  7. Ponieważ katalog docelowy jest katalogiem bieżącym, system ma do niego otwarty uchwyt do plików, a więc nie może go faktycznie usunąć, więc pozostaje taki, jaki jest, co jest pożądanym zachowaniem.
  8. Ponieważ nie próbuje usunąć katalogu docelowego, dopóki jego zawartość nie zostanie usunięta, powinien być teraz pusty (poza tym, co również ma otwarte uchwyty do plików).
  9. Na koniec, używa popd do powrotu do poprzedniego katalogu i kończy pracę skryptu.

(Jeśli chcesz, możesz skrypt skomentować powyższy opis używając rem lub ::).

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

To mi się udało.

  1. Przejdź do folderu, w którym chcesz usunąć pliki.
  2. Wpisz: del *
  3. Y na tak.
  4. Gotowe .