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

时间:2016-04-28 08:44:51

标签: batch-file batch-processing delete-file subdirectory

我的目录为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

2 个答案:

答案 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:Dfindstr一起遍历所有目录,以仅返回那些不以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
相关问题