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

Как удалить все файлы/вложенные папки в данной папке с помощью командной строки?

Advertisement

Я хочу удалить все файлы и вложенные папки в пакетном файле в Windows 7 и сохранить верхнюю папку. В основном, я хочу очистить папку. Какова инструкция командной строки для этого?

Advertisement

Ответы (11)

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

Вы можете сделать это, используя del и флаг /S (чтобы сказать ему, чтобы он удалил все файлы из всех подкаталогов):

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

Лучшее решение: например, я хочу удалить все файлы и подкаталоги родительского каталога, скажем “C:\Users\Desktop\New folder\”. Простой способ - создать пакетный файл из трех команд.

cd C:\Users\Desktop\New folder\

del * /S /Q

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

Здесь сначала будут очищены все файлы во всех подкаталогах, а затем - все пустые подкаталоги. Так как текущий рабочий каталог - это родительский каталог, т.е. “папка \New”, команда rmdir не может удалить этот каталог сама по себе.

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

Перейдите в родительский каталог:

pushd "Parent Directory"

Удалите вложенные папки:

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

вы можете использовать rmdir для удаления файлов и вложенных папок, например:

rmdir /s/q MyFolderPath

Тем не менее, это значительно быстрее, особенно когда в вашей структуре много вложенных папок для использования del перед rmdir, например:

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

Не забудьте использовать котировки, и для /q /s он удалит все репозитории и без подсказок.

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

Если вы хотите удалить все файлы в папке, включая все подпапки, и не полагаться на некоторые ошибочные условия, чтобы сохранить корневую папку нетронутой (как я видел в другом ответе), у вас может быть пакетный файл типа:

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

)

И тогда вы просто назовёте его:

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

Вы можете сделать это быстро и легко, поместив эти три инструкции в ваш файл летучей мыши:

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

Удалить файл:

del PATH_TO_FILE

Удалить папку со всеми файлами в ней:

rmdir /s /q PATH_TO_FOLDER

Удалить все файлы из определенной папки (не удаляя саму папку) немного сложно. del /s *.* не может удалять папки, но удаляет файлы из всех подпапок. Поэтому необходимы две команды:

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

Вы можете создать скрипт для удаления всего, что хотите (папки или файла), как это 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%

Немного примеров использования:

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

Это работало лучше, когда у меня были пробелы в названиях папок.

@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 был болезненно близок к решению, но вы знаете, что говорят о close…

Для ясности, rd /s /q c:\foobar удаляет целевую директорию в дополнение к ее содержимому, но вы не всегда хотите удалить саму директорию, иногда вы просто хотите удалить ее содержимое и оставить директорию в покое. Команда deltree могла бы это сделать, но Micrsoft, в своей бесконечной “мудрости”, удалил эту команду и не портировал ее на Windows.

Вот решение, которое работает, не прибегая к сторонним инструментам. Скорее всего, оно максимально простое и эффективное, как это возможно с помощью командного сценария, вместо того, чтобы прямо писать реальный исполняемый файл. Он не устанавливает никаких переменных окружения и не использует никаких циклов. Он также настолько безопасен, насколько это возможно, с проверкой ошибок везде, где это возможно, а также настолько удобен, насколько это возможно, со встроенными документами

dt.bat (или dt.cmd для детей; неважно, я старый, я использую .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. Он проверяет, был ли передан аргумент командной строки, и печатает информацию об использовании, и выходит, если нет.
  2. Она использует pushd для сохранения текущей директории, затем переключается на целевую директорию, перенаправляя любые ошибки на nul для более чистого использования командной строки (и более чистого ведения логов).
  3. Он проверяет, не совпадает ли текущий каталог с целевым, печатает сообщение об ошибке и выходит, если это не так. Это позволяет избежать случайного удаления содержимого предыдущего каталога, если команда pushd не сработала (например, передача недействительной директории, доступ-ошибка и т.д.)
  4. Эта проверка не чувствительна к регистру, поэтому она обычно безопасна в Windows, но не для любых чувствительных к регистру файловых систем, подобных тем, что используются в системах *nix, даже в Windows.
  5. Она не работает с короткими именами (например, C:\Users\Bob Bobson\foobar не будет восприниматься как то же самое, что C:\Users\BobBob~1\foobar, даже если они на самом деле таковыми являются). Немного неудобно использовать не короткое имя файла, но это лучше безопасно, чем извиняться, тем более, что SFN не полностью надежны или не всегда предсказуемы (и даже могут быть отключены вообще).
  6. 4. Затем она использует rd для удаления целевого каталога и всего его содержимого, перенаправляя любые ошибки (которые должны быть, по крайней мере, одна для самого каталога) на nul. Некоторые заметки об этом:
  7. Так как целевой каталог - это текущий каталог, то система имеет к нему открытый файл-хэндл, и, таким образом, она не может фактически удалить его, поэтому он остается как есть, что и является желаемым поведением.
  8. Так как она не пытается удалить целевой каталог до тех пор, пока его содержимое не будет удалено, теперь он должен быть пустым (кроме всего, что также имеет открытые файловые хэндлы).
  9. Наконец, она использует popd для возврата в предыдущий каталог и заканчивает работу скрипта.

(При желании, вы можете прокомментировать скрипт с приведенными выше описаниями, используя rem или ::).

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

Это то, что работало на меня.

  1. Перейдите внутрь папки, где вы хотите удалить файлы.
  2. Тип: del *
  3. Y для да.
  4. Готово .

Похожие вопросы

3
19
10
28
1
Advertisement