You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本:如何递归删除目录中除点开头文件/文件夹外的所有内容?

批处理实现递归清空src目录但保留隐藏项的简洁方案

我来给你梳理几个简洁的批处理写法,刚好能满足你的需求:递归删除src目录里的内容,但保留所有以.开头的文件(比如.gitignore)和文件夹(比如.git、.vscode),子目录的规则不用严格遵循也没关系。

方法一:逻辑清晰的分步骤处理(推荐)

创建一个.bat文件,把下面的代码贴进去就行:

@echo off
set "targetDir=src"

:: 递归删除所有非隐藏文件(自动跳过以.开头的隐藏文件)
del /s /q /f "%targetDir%\*"

:: 递归删除src下的非隐藏顶层目录(连带目录里的所有内容)
for /d /r "%targetDir%" %%d in (*) do (
    if "%%~dpd"=="%targetDir%\" (
        rd /s /q "%%d"
    )
)

命令拆解:

  • del /s /q /f "%targetDir%\*":

    • /s:递归处理所有子目录里的文件
    • /q:安静模式,无需每次确认删除
    • /f:强制删除只读文件
    • 核心逻辑:Windows中以.开头的文件默认是隐藏属性,*通配符不会匹配它们,所以这条命令只会删除非隐藏文件,自动保留.gitignore这类目标文件。
  • for /d /r "%targetDir%" %%d in (*):

    • 遍历src下的所有子目录,通过%%~dpd判断是否为src的直接子目录,是的话就用rd /s /q递归删除整个目录——这样就保留了.git、.vscode这类以.开头的顶层目录。

方法二:更简洁的极简写法(适合子目录完全不用管的情况)

如果子目录里的内容可以随意删除,只要保证src顶层的.开头项保留就行,那可以用更短的代码:

@echo off
pushd src || exit /b
:: 递归删所有非隐藏文件
del /s /q /f *
:: 删src下所有非隐藏顶层目录(连带内容)
for /d %%d in (*) do rd /s /q "%%d"
popd

这个写法更清爽:

  • pushd src:直接进入src目录,避免路径写错的问题
  • del /s /q /f *:和上面逻辑一致,自动跳过隐藏文件,递归删除其他文件
  • for /d %%d in (*):只遍历src当前目录下的非隐藏子目录,一键删除整个目录及其内容
  • popd:回到原来的工作目录

小提醒

测试的时候可以先把del改成echo del,rd改成echo rd,先预览要删除的内容,避免误删重要文件哦!

内容的提问来源于stack exchange,提问作者ribbanya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:34:16