Вы можете установить атрибуты файлов, которые вы хотите сохранить сначала только для чтения и скрыть, удалить остальные, а затем сбросить атрибуты скрытых файлов только для чтения обратно.
attrib +r +s *.bat
del *.*
attrib -r -s *.bat
Я делал это довольно часто, и написал пакетный файл, который автоматизировал это:
@echo off
@ if "%1" == "%9" goto help
@ if /i %1 EQU ? goto help
@ if /i %1 EQU help goto help
@ attrib +h +s %1
@ %2 %3 /Q
@ attrib -h -s %1
@ goto :EOF
:help
@echo ╔═══════════════════════════════════════════════════════╗
@echo ║ except filespec1 doscommand filespec2 ║
@echo ║ ║
@echo ║ filespec1 The files to exclude from doscommand ║
@echo ║ doscommmand The DOS command to execute on filespec2 ║
@echo ║ filespec2 The files to execute doscommand against ║
@echo ║ ║
@echo ║ Example: ║
@echo ║ ║
@echo ║ except *.txt del *.* ║
@echo ║ ║
@echo ║Deletes all files except text files in the directory ║
@echo ╚═══════════════════════════════════════════════════════╝
Вероятно, можно использовать только скрытый атрибут, но я знаю, что del не касается скрытых системных файлов, поэтому я установил оба. Лучше, чем потом сожалеть, ИМО.
На основании комментария Маркуса: если вы хотите расширить это, чтобы включить подкаталоги текущего каталога, просто измените обе строки атрибута на
attrib <remainder of line> /S
и измените строку между двумя строками атрибута на
@ %2 %3 /Q /S
Это должно работать для большинства вещей, которые вы хотели бы, кроме .bat, чтобы сделать.