如何通过命令提示符删除给定文件夹中的所有文件/子文件夹?


42

我想删除Windows 7中批处理文件中的所有文件和子文件夹,并保留顶部文件夹。基本上清空文件夹。命令行指令是什么?


3
不是要挑剔,而是要在“命令提示符”而不是“ DOS”中查找此操作。自Win ME以来,还没有DOS子系统。
MDMarra

@MarkM:嗯,确实存在,ntvdm但是随着64位系统获得市场份额,它变得越来越不重要了。
乔伊

Answers:


55

您可以使用del/S标志(告诉它从所有子目录中删除所有文件)执行此操作:

del /S C:\Path\to\directory\*

2
您的更好:D +
1-

3
说明:del代表Delete,S代表递归。
Tamara Wijsman 2010年

3
@Tony_Henrich,在此处了解有关msdos命令的更多信息。 computerhope.com/msdos.htm
摩押

3
并使用/ Q保留空的子文件夹,这是不可取的。
Tony_Henrich 2010年

3
这是错误的答案,我不知道为什么它获得了很多赞成票。似乎人们没有完全理解问题,也没有阅读评论!我将仔细研究答案并选择正确的答案。
Tony_Henrich '16

22

最好的解决方案:例如,我想删除父目录的所有文件和子目录,说“ C:\ Users \ Desktop \ New folder \”。简单的方法是创建以下三个命令的批处理文件。

cd C:\ Users \ Desktop \ New文件夹\

del * / S / Q

rmdir / S / Q“ C:\ Users \ Desktop \ New文件夹\”

在这里,它将首先清除所有子目录中的所有文件,然后清除所有空子目录。由于当前工作目录是父目录,即“ \ New folder”,因此rmdir命令无法删除此目录本身。


1
除了在系统无法删除根文件夹时发出警告,效果非常好。
Jerther '16

2
不好。硬编码的路径,通过查看它不会清空文件夹。它将其删除。也很危险。如果路径不存在或拼写错误,它将删除当前文件夹中的文件。
Tony_Henrich '16

1
正如@Tony_Henrich所说的,该rmdir命令将删除New folder
Nuktu'4

否。这实际上可以完全清除“新文件夹”而不删除文件夹本身。唯一的问题是,当操作系统无法删除父文件夹时,它将发出次要警告。另外,除非您有一个大文件夹,否则del命令是多余的,在这种情况下,它可能会更快。您可以像这样修改它(很抱歉注释中没有换行符):set FOLDER =“%userprofile%\ Desktop \ New folder” cd%FOLDER%rmdir / S / Q%FOLDER%\> nul 2>&1
HSuke

3
真危险。如果有人继续删除/重命名C:\ Users \ Desktop \ New文件夹,则CD的第一行将失败,并且您的批处理文件会愉快地删除当前(默认)目录中的所有内容。最终很有可能是您的工作目录或C:\ Windows \ System32
Ishmaeel

9

导航到父目录:

pushd "Parent Directory"

删除子文件夹:

rd /s /q . 2>nul

1
哇,真是骇人听闻。:)
TarnayKálmán2014年

1
这本质上等同于先前的两个答案。
斯科特

上面同意-这是以前答案的副本,替换为与要替换的命令同义的命令。pushd不会在此处添加cd尚未执行的操作。
Hashim

这是迄今为止我唯一能够使用的,完全能够满足要求者的要求的工具,其他所有工具都可以删除所有文件。当然,rmdir /s path-to-folder将删除其中包含所有内容的文件夹,但是询问者想知道如何删除工作目录中的所有内容。
Katz_Katz_Katz

这个答案最适合我。对于所有其他答案,它在使用/ Q时并没有删除非空目录,并且在不使用/ Q时总是要求确认。
marijnr

5
rmdir "c:\pathofyourdirectory" /q /s

不要忘记使用引号,因为/q /s它会删除所有存储库,而不会提示。


2
问题是“我想在Windows 7中删除批处理文件中的所有文件和子文件夹,并保留顶部文件夹。
Werner Henze 2014年

5

您可以使用rmdir删除文件和子文件夹,如下所示:

rmdir /s/q MyFolderPath

但是,它的速度明显更快,尤其是当您的结构中有很多子文件夹在rmdir之前使用del时,如下所示:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath

第一个选项给出错误“目录不为空”。第二个选项中的第一个命令删除整个文件夹。它并没有像我想要的那样保持它。如果第一个命令删除了整个文件夹,则不需要第二个命令。
Tony_Henrich '16

rmdir命令(两者相同)将删除父文件夹。这不是问题的答案。人们为什么不读书?
Hashim

3

如果要删除文件夹中的所有文件,包括所有子文件夹,并且不依赖某些错误条件来保持根文件夹的完整性(就像我在另一个答案中看到的那样),则可以使用如下批处理文件:

@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

通过将以下三个说明放入bat文件中,您可以快速轻松地完成此操作:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder

这非常有用,因为它还会删除所有隐藏文件或系统文件。
弱点

1

当文件夹名称中有空格时,这对我来说效果更好。

@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

)

人们总是忘记名称中有空格。
凯文·潘科

1

删除文件:

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

0

这对我有用。

  1. 导航到要删除文件的文件夹内。
  2. 类型: del *
  3. Y 是的。
  4. 完成了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.