Как я могу удалить файлы, которые не соответствуют шаблону? - PullRequest
7 голосов
/ 11 февраля 2011

Например, я могу удалить все .exe файлы, используя следующий подстановочный знак:

del *.exe

Как я могу сделать обратное, т.е. удалить все файлы, которые не заканчиваются на .exe?

Ответы [ 4 ]

10 голосов
/ 11 февраля 2011

Вы можете попробовать это.

FOR /R [directory] %%F IN (*.*) DO IF NOT "%%~xF" == ".[extension]" DEL /F /S "%%F"

Или, если у вас есть только один файл .exe, это еще проще.

for %i in (*.*) do if not %i == FILE.EXE del %i
3 голосов
/ 11 февраля 2011

Прямого пути нет, вот один способ сделать это без сценариев:

  1. Создать подкаталог.
  2. Скопируйте все файлы *.exe* в подкаталог.
  3. Удалить все файлы (*.*) в текущем каталоге.
  4. Скопировать все файлы в подкаталоге в текущий каталог.
  5. Удалить все файлы в подкаталоге.
  6. Удалить ( rmdir ) подкаталог

А вот код:

C:\mydir> mkdir temp
C:\mydir> move *.exe temp
C:\mydir> del *.* /f /q
C:\mydir> move temp\*.exe .
C:\mydir> rmdir temp
2 голосов
/ 11 февраля 2011

Не знаю, будет ли это работать для вас (зависит от того, есть ли в вашем каталоге другие файлы только для чтения), но это должно работать:

attrib +R *.exe
del *.*
attrib -R *.exe

Что касается вашего вопроса, в командах по умолчанию для DOS нет такой вещи, как "исключение" подстановочных знаков

0 голосов
/ 22 декабря 2015

Для улучшения ответа на вопрос (об исключении подстановочных знаков): если вы не ищете конкретное расширение, вы можете использовать этот цикл for:

for /F "usebackq" %i IN (`dir /b *^|findstr /i /v <PATTERN>`) DO @echo %i

замените "echo" на "дель»...

...