我的目录为D:\data
,其中包含许多包含地图图层(D:\data\parks, D:\data\buildings, D:\data\rivers)
数据的文件夹。
我想删除所有这些子文件夹的内容,其中包括文件和子文件夹,但数据'中的任何文件夹除外。从名称'raster'
开始,即
D:\data\raster_aerialimage
。
我有一些代码会删除其中一个文件夹,但我需要遍历所有文件夹并仅指定不以' raster'开头的文件夹,如何附加此代码,或者我应该从一些全新的东西开始?
FOR /D %%p IN ("D:\data\parks\*.*") DO rmdir "%%p" /s /q
答案 0 :(得分:1)
我建议使用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%
变量后面的通配符星号。
它很快,它可以应对很长的路径名。
答案 1 :(得分:1)
您可以使用dir /A:D
与findstr
一起遍历所有目录,以仅返回那些不以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