如何从批处理文件中不以特定名称开头的文件夹中删除文件和子文件夹?

How to delete files and sub-folders from folders not starting with a specific name in a batch file?

我有一个 D:\data 目录,其中有许多文件夹包含来自地图层 (D:\data\parks, D:\data\buildings, D:\data\rivers) 的数据。

我想删除所有这些子文件夹的内容,包括文件和子文件夹,'data' 中以名称 'raster' 开头的任何文件夹除外,即

D:\data\raster_aerialimage .

我有一些删除其中一个文件夹的代码,但我需要遍历所有文件夹并仅指定不以 'raster' 开头的文件夹,我该如何附加此代码,或者我应该开始有全新的东西吗?

FOR /D %%p IN ("D:\data\parks\*.*") DO rmdir "%%p" /s /q

我建议使用 robocopy.exe,它在所有较新的 Windows 版本中可用:

@echo off
set folder=D:\data
set except=raster
set "MT=%TEMP%\DelFolder_%RANDOM%"

mkdir %MT%
:: mirror an empty dir to a folder tree will delete it
robocopy "%MT%" "%folder%" /MIR /XD %except%* /R:1 /W:1
rmdir /S /Q "%MT%"

请注意 %except% 变量后面的通配符星号。

速度很快,而且可以处理很长的路径名。

您可以使用 dir /A:D 遍历所有目录以及 findstr 到 return 只有那些不以 raster 开头的目录。然后使用 for /F 循环来解析输出:

pushd "D:\data"
if ErrorLevel 1 goto :EOF
for /F "eol=| delims=" %%P in ('
    dir /B /A:D "*.*" ^| findstr /L /V /I /B /C:"raster"
') do (
    rmdir /S /Q "%%~fP"
)
popd