Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить все файлы кроме

Ответить
Настройки темы
CMD/BAT - [решено] Удалить все файлы кроме

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Нужна помощь в написании скрипта:
Задача: удалить все файлы и каталога и всех подкаталогов, кроме файлов содержащих "bgi" в имени.
Код: Выделить весь код
for /d %%a in ("C:\1") do if /i not "%%a"=="*bgi*" (del/s/q %%~sa\*.*)
Этот скрипт трёт все файлы.

Отправлено: 09:29, 19-10-2015

 

Ветеран


Contributor


Сообщения: 2723
Благодарности: 1693

Профиль | Отправить PM | Цитировать


Если для произвольного числа исключений при удалении, то
Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Temp"
Set Exclude="Ru.ini" "En.ini" "En.pdf"  "Ru.pdf"

FOR %%f IN ("%BoxIn%\*.*") DO Call :ExDel "%%f"
GoTo :Eof

:ExDel
	FOR %%e IN (%Exclude%) DO If /I "%~nx1"==%%e GoTo :Eof
	Del %1
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:06, 13-03-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


тогда уж и покороче и побыстрее так (да и возможности маски шире):
Код: Выделить весь код
@echo off
set "d=papka"
:: Ниже в каждом echo, после : пишем имя, часть имени, расширение того что надо оставить
:: В данном примере не будут удалены файлы с именем "aa bb" (любое расширение) и файлы с расширением docx и xlsx (word и excel)
>$ (
 echo:aa bb
 echo:.docx
 echo:.xlsx
)
for /f "delims=" %%a in ('xcopy /sl /exclude:$ "%d%\*"') do del /q "%%~a" $ 2>nul
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:38, 14-03-2017 | #12


Ветеран


Contributor


Сообщения: 2723
Благодарности: 1693

Профиль | Отправить PM | Цитировать


alpap, мне нравится эта возможность xcopy, но обычно я стремлюсь не делать новых файлов из опасения попасть на отсвутствие прав на запись. Да и убрать за собой неплохо бы☺. А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься.
Цитата:
не будут удалены файлы с именем "aa bb"
а также все файлы, в имени которых (в том числе и имени папки в пути) содержится aa bb. Поэтому ИМХО, этим надо пользоваться осторожнее.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:38, 14-03-2017 | #13


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Поэтому ИМХО, этим надо пользоваться осторожнее. »
дык это понятно, и это мы еще о файлах без расширения не говорили, кодировки не упоминали и длину имени, кто ж спорит по части осторожности?
тут в данном случае все четко определено и если так же четко подавать (и учесть что не будет таких: ""Ru.pdfEn.pdf""имен файлов, хотя почему и нет), то работать будет, а соломку с собой носить надо

Отправлено: 16:15, 14-03-2017 | #14


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата megaloman:
А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься. »
Почему?

Отправлено: 16:53, 14-03-2017 | #15


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


тем более этот служебный файл никуда и не прячется, создается рядом и оттуда же сразу и удаляется (del /q "%%~a" $)

Отправлено: 17:56, 14-03-2017 | #16


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата alpap:
создается рядом »
Не всегда есть права на создание файлов рядом.

Отправлено: 18:48, 14-03-2017 | #17


Ветеран


Contributor


Сообщения: 2723
Благодарности: 1693

Профиль | Отправить PM | Цитировать


Iska,
Не работает
xcopy Z:\temp\*.* /L /EXCLUDE:"Z:\У попа была собака\kuku"
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\У попа была собака\kuku
xcopy Z:\temp\*.* /L /EXCLUDE:"kuku"

Работает
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\Траляля\kuku

Еще другая неприятность с ключом L: xcopy Z:\temp\*.* /L работать не будет, если находиться в папке где файлы (Z:\temp\), выдаст "Невозможно скопировать файл в себя".
ИМХО аккуратнее написать, например
xcopy Z:\temp\*.* "%Tmp%\" /L
то есть в качестве выходной указать другую существующую папку, хотя туда и ничего не попадёт. Кстати, еще странность: если там будет файл с таким же именем, как и в исходной папке, выдаст запрос на перезапись.

Извините, впал в глубокий оффтоп, но конструкция
Код: Выделить весь код
@Echo Off

chcp 1251 >nul

FOR /F "usebackq delims=" %%f IN (`xcopy Z:\temp\*.* "%Tmp%\" /L`) DO Echo %%f
FOR /F "usebackq delims=" %%f IN (`Dir Z:\temp\*.* /A:-D /S /B`) DO Echo %%f


pause
при наличии кириллических символов в названии для xcopy не работает, а Dir - пожалуйста! (хотел записать рез работы xcopy в файл для прочтения в notepad)
alpap, а если батник запускается с расшаренного ресурса с запретом на запись?
Вообще, xcopy моя любимая команда, но иногда доводит до истерики

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-03-2017 в 19:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 14-03-2017 | #18


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


megaloman,
вот видите как полезно залезть в ... трущобы, и я немного нового узнал и поговорили, а для кого-то в поиске и кладом окажется.

Отправлено: 20:35, 14-03-2017 | #19


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


Всем здравствуйте

Есть папка, типа C:\1 тест\

Внутри этой папки C:\1 тест\ вагон подпапок

Внутри каждой подпапки есть файл 1 Вася Привет.doc

Задача - оставить файл 1 Вася Привет.doc внутри подпапок, остальные файлы всяко-разных расширений удалить

Пожалуйста, научите

Итого типа так
Код: Выделить весь код
@Echo Off

Set Path=C:\1 тест

Set Filemane=1 Вася Привет.doc

команда удаления

Pause

Exit

Последний раз редактировалось SharkyEXE, 03-08-2020 в 20:32.


Отправлено: 20:03, 03-08-2020 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить все файлы кроме

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Удалить все наибольшие элементы, кроме первого, в списке целых чисел artyomartemyev96 Программирование и базы данных 0 01-03-2015 18:08
CMD/BAT - удалить все файлы с раб.стола, кроме определенных ярлыков. через КД santey007 Скриптовые языки администрирования Windows 29 04-02-2015 10:53
CMD/BAT - [решено] удалить все пустые строки, кроме самой последней Alexander_88 Скриптовые языки администрирования Windows 8 05-01-2015 12:43
2010 - [решено] Как удалить все стили (кроме по умолчанию) в ворд? Pozia Microsoft Office (Word, Excel, Outlook и т.д.) 13 31-03-2012 19:28
CMD/BAT - [решено] Удалить все файлы из папки кроме нужных Sirimika Скриптовые языки администрирования Windows 16 12-11-2010 10:33




 
Переход