![](/img/trans.png)
[英]How to delete all files in a directory and subdirectories except for certain folders?
[英]Delete all files and folders in a directory
我想要一个批处理文件,它将删除我的无线工具包的缓存文件夹中的所有文件夹和文件。
目前我有以下内容:
cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db
这将删除我的RMS目录中的所有 .db 文件,但是我想删除该目录中的所有内容。 我怎样才能做到这一点?
利用:
创建批处理文件
将以下文本复制到批处理文件中
set folder="C:\test" cd /d %folder% for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
它将删除所有文件和文件夹。
del *.*
而不是del *.db
。 这将删除所有内容。
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)
这将从文件夹(以及文件夹本身)中删除所有内容。
del *.*
只会删除文件,不会删除子目录。 要核对目录的内容,可以使用以下脚本:
@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START
:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE
:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd
:DONE
endlocal
pushd
更改为您要删除子项的目录。 那么当rd
要求删除当前目录和所有子目录时,子目录删除成功,但是当前目录删除失败——因为我们在里面。 这会产生2> NUL
吞下的错误。 (2 是错误流)。
我只是根据 morty346 发布的内容将这些放在一起:
set folder="C:\test"
IF EXIST "%folder%" (
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)
它首先快速检查变量中定义的文件夹是否存在,将目录更改为文件夹,然后删除内容。
您可以使用del
和/S
标志来执行此操作(告诉它递归所有子目录中的所有文件):
del /S C:\Path\to\directory\*
也可以使用RD命令。 无提示地递归删除:
@RD /S /Q %VAR_PATH%
set "DIR_TO_DELETE=your_path_to_the_folder"
IF EXIST %DIR_TO_DELETE% (
FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
del %DIR_TO_DELETE%\*.* /F /Q
)
利用
set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%
此版本无需询问即可删除:
set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%
例子:
set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%
这将清除C:\foo1\foo\foo\foo3
。
(我想提一下Abdullah Sabouin 的回答。关于我抄袭他的事情有点混乱。我没有注意到他的帖子。我要感谢melpomene指出错误!)
尝试以下操作; 这个对我有用。
我有一个将数据转储到“C:\tmp”文件夹中的应用程序,以下对我来说效果最好。 它甚至不询问是或否来删除数据。 我已经制定了它每 5 分钟运行一次的时间表
cd "C:\tmp"
del *.* /Q
更好的是,假设我想删除C:\windows\temp
文件夹下的所有内容。
@echo off
rd C:\windows\temp /s /q
您可以使用robocopy将一个空文件夹镜像到您正在清除的文件夹。
robocopy "C:\temp\empty" "C:\temp\target" /E /MIR
如果您无法删除或重新创建实际文件夹,它也可以工作。
它确实需要一个现有的空目录。
只是GregM 答案的修改版本:
set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause
REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)
REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)
REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.
您不能单独使用rmdir
或del
删除所有内容:
rmdir /s /q
不接受通配符参数。 所以rmdir /s /q *
会出错。del /s /f /q
将删除所有文件,但将保留空的子目录。我的首选解决方案(正如我在许多其他批处理文件中使用的那样)是:
rmdir /s /q . 2>NUL
简单简单的答案:
C:
del /S /Q C:\folderName\oderFolderName\*
C:
如果您必须从 D:切换到 C:或 C:切换到 D:(或其他任何内容),这很重要
/S
递归,所有子文件夹一起删除
/Q
如果你没有激活安静模式,提示符会要求你为每个子文件夹输入 y ......你不想要那个
小心,这很激烈。
我想建议使用像cleardir这样的简单工具。 因此,在批处理文件中,您可以编写:
cleardir path/to/dir
你会得到空目录dir
。 有点慢,但仍然解决了“问题”。
我是该工具的作者 =)
最简单的方法是:
警告!
这将删除文件夹中的所有内容而不要求确认!!!
所以明智地选择保存它的地方。
您应该运行此命令以删除所有文件del *。*
@echo off
@color 0A
echo Deleting logs
rmdir /S/Q c:\log\
ping 1.1.1.1 -n 5 -w 1000 > nul
echo Adding log folder back
md c:\log\
你走在正确的轨道上。 只需添加代码以添加再次删除的文件夹。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.