Представьте, что у нас есть каталог c:\test
со следующими файлами:
first.txt
second.doc
third.txt
fourth.txt_bak
Я хочу удалить только txt
файлы, но оставьте doc
и txtwhatever
нетронутый.
Когда я запускаю команду del c:\test\*.txt
, он удаляет все, кроме 2-го файла.
Любые идеи, как это исправить, чтобы удалить только txt
файлы?
редактировать: Понятия не имею, как заказчик назовет свои файлы. Суффикс может быть любым, не только txt_something
. Это могло быть также txtsomething
, txt-something
, и так далее...
Я также не могу установить на сервер какие-либо двоичные файлы, я могу использовать только стандартные.
Может быть, вы могли бы использовать forfiles команда:
forfiles /p "c:\test" /m "*.txt" /c "cmd /c del @file"
Основано на идее fquinto, но более надежно:
mkdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC
move *.txt?* FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC
del *.txt
move FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC\*.* .
rmdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC
В *.txt?*
подстановочный знак перемещает все файлы с расширением более 3 символов, начиная с * .txt, во временный каталог. Это файлы, имена которых в формате 8.3 заканчиваются на .txt. Итак, в строке 3 вы удаляете только файлы с истинным расширением .txt, а в строке 4 вы восстанавливаете файлы, которые были бы случайно удалены.
GUID нужен, чтобы сделать временный каталог уникальным.
Быстрое решение, но без прямого ответа на ваш вопрос:
rename *.txt_* *.nodelete del *.txt rename *.nodelete *.txt_bakcup
Я знаю, что отвечаю на вопрос не так, как вы хотите, но ... ... если вы можете использовать PowerShell, командлет Remove-Item сделает то, что вам нужно.
Удалить элемент * .txt
Приветствую
Алекс Руж
Если я правильно понимаю вашу проблему, это может быть полезно:
@echo off
setlocal EnableDelayedExpansion
set exclude=.log.sdb.sdk.bat.
for %%f in (*.*) do (
if /I "%exclude%" == "!exclude:%%~Xf.=!" del "%%f"
)
ИЛИ
@echo off
forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"sdb\" if /i not @ext==\"sbk\" if /i not @ext==\"log\" if /i not @ext==\"bat\" del @file"
Для справки: