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

Batch file 如何从批处理文件中不以特定名称开头的文件夹中删除文件和子文件夹?,batch-file,batch-processing,delete-file,subdirectory,Batch File,Batch Processing,Delete File,Subdirectory,我有一个目录D:\data,其中有许多文件夹包含来自地图图层的数据(D:\data\parks,D:\data\buildings,D:\data\rivers) 我想删除所有这些子文件夹(包括文件和子文件夹)的内容,但“数据”中以名称开头的任何文件夹除外,即 D:\data\raster\u aerialimage 我有一些删除其中一个文件夹的代码,但我需要循环遍历所有文件夹,并仅指定不以“光栅”开头的文件夹,我如何附加此代码,或者我应该从全新的文件夹开始 FOR /D %%p IN ("D:

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

我想删除所有这些子文件夹(包括文件和子文件夹)的内容,但“数据”中以名称开头的任何文件夹除外,即

D:\data\raster\u aerialimage

我有一些删除其中一个文件夹的代码,但我需要循环遍历所有文件夹,并仅指定不以“光栅”开头的文件夹,我如何附加此代码,或者我应该从全新的文件夹开始

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%"
请注意,
%后面的通配符星号,除了%
变量


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

您可以使用
dir/A:D
遍历所有目录,同时使用
findstr
只返回那些不以
光栅
开头的目录。然后使用
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

谢谢@aschipfl-我似乎收到一个错误'D:\>(rmdir/S/Q“airports”),系统找不到指定的文件。其他文件夹也会出现这种情况。嗯
dir/A:D
应仅返回确实存在的目录。。。也许您对这些目录或某些子项没有足够的访问权限?如果您尝试使用
dir/B/A:D-L“D:\data”
,会怎么样?我似乎得到了相同的信息。我已将数据移动到本地C:驱动器和Z:驱动器上,但出现相同的消息。我能在所有三个驱动器上读写,这有点神秘!问题目录的确切名称是什么?是否在脚本中启用了?问题不是因为它试图搜索文件而不是文件夹?(只是阅读消息“系统找不到指定的文件”,因为它们是我希望删除的文件夹)。这似乎工作得很好-唯一的问题是它删除了未命名为raster的文件夹,实际上我只想删除文件夹的内容,而不是文件夹本身。