Windows (批处理)如何递归删除目录中的所有文件/文件夹(前导文件除外)。?

Windows (批处理)如何递归删除目录中的所有文件/文件夹(前导文件除外)。?,windows,batch-file,command-line,pattern-matching,Windows,Batch File,Command Line,Pattern Matching,我有一个目录,src。我想递归删除它的所有内容,除了文件(.gitignore,…)和名称以开头的文件夹(.git,.vscode,…)。在子目录中匹配该模式既不是必要的,也不是有害的 在批处理文件中执行此操作的最干净方法是什么?尝试此方法以排除带有前导点的文件夹(在每个文件夹的基础上): 这不会影响在其他位置包含点的文件夹名称 递归所有文件夹并使用findstr筛选所有包含\。这两个字符都需要用反斜杠转义 for /r /D %%A in (*) do @echo %%A|findstr /V

我有一个目录,
src
。我想递归删除它的所有内容,除了文件(
.gitignore
,…)和名称以
开头的文件夹(
.git
.vscode
,…)。在子目录中匹配该模式既不是必要的,也不是有害的


在批处理文件中执行此操作的最干净方法是什么?

尝试此方法以排除带有前导点的文件夹(在每个文件夹的基础上):

这不会影响在其他位置包含点的文件夹名称

递归所有文件夹并使用findstr筛选所有包含
\。
这两个字符都需要用反斜杠转义

for /r /D %%A in (*) do @echo %%A|findstr /V "\\\."
@ECHO关闭
SETLOCAL
设置“sourcedir=U:\sourcedir”
::步骤1:删除所有未启动的文件。“”
对于/f“tokens=1*delims=“%%a IN(
'dir/s/b/a-d”%sourcedir%\*“'
)做(
ECHO%%~nxa | FINDSTR/b/L.“>nul
如果错误级别1回波(删除“%%a”
)
::步骤2:删除所有未启动的目录“”
对于/f“tokens=1*delims=“%%a IN(
'dir/s/b/ad”%sourcedir%\*“^排序/r'
)做(
ECHO%%~nxa | FINDSTR/b/L.“>nul
如果错误级别1回波(RD“%%a”
)
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

所需的DEL命令仅用于测试目的。
ECHO
ed。验证命令正确后,将
ECHO(DEL
更改为
DEL
以实际删除文件

所需的RD命令仅用于测试。
ECHO
ed。验证命令正确后,将
ECHO(RD
更改为
RD
,以实际删除目录

对于整个子树中的每个文件名,请查看它是否以
开头,如果不是,请将
errorlevel
设置为非0,然后删除该文件


完成此操作后,使用directoryname重复此操作,但对找到的名称进行反向排序,以便任何目录的子目录名都会出现在directoryname之前。尝试使用
rd
删除目录-如果该目录包含文件或子目录(隐式启动
),则该目录将保留。将
2>nul
追加到
rd
行以抑制错误消息(其中目录仍包含文件/子目录,无法删除)

如果在一个非
目录中有一个
文件或目录,会发生什么情况?在我的情况下,这两种方式都不重要。我不相信在我的环境中会存在任何这样的文件。我想保存会更好。到目前为止,你尝试了什么,你在哪里卡住了?检查使用模式…反转,bas对于/f%%i in('dir/b/s/a“*”),请执行echo%%i获取我要排除的文件,但我不知道如何排除它们。出于我的目的,只需删除
dir
中的
/s
,但效果很好。谢谢!
for /r /D %%A in (*) do @echo %%A|findstr /V "\\\."