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 "\\\."