2016-04-28 2 views
1

У меня есть каталог D:\data, который имеет много папок, содержащих данные из слоев карты (D:\data\parks, D:\data\buildings, D:\data\rivers).Как удалить файлы и подпапки из папок, не начиная с определенного имени в пакетном файле?

Я хочу, чтобы удалить содержимое всех этих подпапок, которая включает в себя как файлы и вложенные папки, за исключением каких-либо папок в «данных», которые начинаются с названием 'raster' т.е.

D:\data\raster_aerialimage.

У меня есть код, который удаляет одну из папок, но мне нужно прокрутить все папки и указать только папки, которые не начинаются с «растра», как я могу добавить этот код, или я должен начать с чего-то бренда новый?

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

ответ

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 
+0

Спасибо @aschipfl - Кажется, я получаю сообщение об ошибке 'D: \> (rmdir/S/Q "airport") Система не может найти указанный файл. Это похоже на некоторые другие папки. – Chris

+0

Хмм ... 'dir/A: D' должны возвращать только те каталоги, которые существуют ... возможно, у вас недостаточно прав доступа к этим каталогам или к некоторым подпозициям? Что делать, если вы попытаетесь использовать dir/B/A: D-L? D: \ data "'? – aschipfl

+0

Кажется, я получаю то же сообщение. Я переместил данные как на мой локальный диск C:, так и на диск Z: но появляется такое же сообщение. Я могу читать и писать на всех трех дисках, так немного тайны! – Chris

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%.

Это быстро, и он справляется с очень длинными дорожками.

+0

Это, кажется, работает очень хорошо - единственная проблема в том, что удалении папки не именованный растр, я на самом деле хочу удалить только содержимое папки, а не папки самих себя. – Chris

Смежные вопросы