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

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

Ответить
Настройки темы
CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

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


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

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


Изменения
Автор: oniava
Дата: 07-10-2017
Здравствуйте.

Нужен bat-ник для поиска и удаления файлов и папок по части названия файла.

Подробнее:

Есть папка к примеру E:\VW\6.Base_02.2015 (до 40 Гб файл)

В ней куча файлов
Скрытый текст



Задача: Удалить из этой папки файлы которые содержат в названии символы "fr, da, it, es" ну и типа такого.
Одним словом, мне нужно оставить файлы с языками это: ru-RU - русский, en-GB - английский (Великобритания), en-US - английский (США), de-DE - немецкий.
С другими языками файлы удалить.

Что то, найти в сети не могу что нибудь подобное...

Отправлено: 17:11, 06-10-2017

 

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


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

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


Подправил первую строку вашего кода:

Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

rem cd /d "%~dp0"

Set "Exclude=*ru-RU* *en-GB* *en-US* *de-DE*"

Set "BoxIn=%~dp0"
rem Set "BoxIn=%userprofile%\Desktop\ElsaWin"

Set "Mask=*.??-??.cab"
Set "Log=%userprofile%\Desktop\%~nx0.log"

>"%Log%" (FOR %%f IN ("%BoxIn%\%Mask%") DO Call :DelLan "%%f"  "%%~nf")
GoTo :Eof

:DelLan
	FOR %%e IN (%Exclude%) DO If /I "%~x2"==".%%e" GoTo :Eof
	Echo Del %1
	Del %1
GoTo :Eof
Батник отработал теперь, но по маске файлы не различает.
Удалил все файлы почему то...

Последний раз редактировалось oniava, 07-10-2017 в 02:23.


Отправлено: 02:17, 07-10-2017 | #11



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

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


Ветеран


Contributor


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

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


Цитата oniava:
Батник отработал теперь, но по маске файлы не различает.
Удалил все файлы почему то... »
Вы извратили исключения при удалении. В Exclude записаны не маски, а строгое соответствие в имени файлов и подстановочные знаки * там не умесны.
Цитата oniava:
Он ничего не удалил но лог выдал такой:
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.cs-CZ.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.da-DK.cab" »
То есть, что видим: в лог пишется копия команды на удаление файла. Файл найден. И, если при исполнении батника ошибочных сообщений не было, значит удаление прошло нормально.
Цитата oniava:
Второй код в батнике, вообще ничего не сделал и лог выдал пустой. »
То есть файлы уже удалены, и удалять больше нечего.
Для большего контроля команду del в моих вариантах кода измените
Del /F %1 2>&1

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

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

Отправлено: 14:48, 07-10-2017 | #12


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


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

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


Здравствуйте megaloman.
После замены на
Цитата megaloman:
Del /F %1 2>&1 »
Ваш код заработал, вот только по маске работает не корректно, не до конца чистит почему то...
(Вся проблема кода, была в команде на удаление)
Код скрипта который использовал:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

Set "Exclude=ru-RU en-GB en-US de-DE"

Set "BoxIn=%~dp0"
rem Set "BoxIn=%userprofile%\Desktop\ElsaWin"

Set "Mask=*.??-??.cab"
Set "Log=%userprofile%\Desktop\%~nx0.log"

>"%Log%" (FOR %%f IN ("%BoxIn%\%Mask%") DO Call :DelLan "%%f"  "%%~nf")
GoTo :Eof

:DelLan
	FOR %%e IN (%Exclude%) DO If /I "%~x2"==".%%e" GoTo :Eof
	Echo Del %1
	Del /F %1 2>&1
GoTo :Eof
В логе 255 записей о удалении.
Но удаление не полное, куча лишних файлов.

Вот скрины оставшихся файлов.
Скрытый текст

Скрытый текст

Скрытый текст

Скрытый текст

Скрытый текст

Скрытый текст

Скрытый текст

Скрытый текст



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

Последний раз редактировалось oniava, 08-10-2017 в 00:00.


Отправлено: 16:02, 07-10-2017 | #13


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


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

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


Цитата megaloman:
что не удалилось? Надо четко представлять вид имён файлов, чтобы корректно написать код »
Я на скринах обвел файлы которые должны были то же удалиться.

Файлы в папке могут быть разного вида, примерно:
saz.N.sv-SE.2CA.cab
slp.V.sv-SE#graphics.cab
slp.V.nl-NL.cab
help..et-EE.cab
hs2.N.fi-FI.cab
saz.V.es-ES.7P5.cab
saz..da-DK.2EE.5P3.cab
saz.saz.da-DK.2EE.5P3.cab.da-DK.2EE.5P3.cab
saz.saz..da-DK.2EE.5P3.cab.da-DK.2EE.5P3.cab
saz.da-DK.cab
и т.д.

Перед языковыми символами, что спереди что сзади символов может быть ЧТО УГОДНО!

{лабуда всякая}et-EE{лабуда всякая}.cab

Я даже не знаю что именно, это как сервер мне пришлет...

Последний раз редактировалось oniava, 07-10-2017 в 17:15.


Отправлено: 16:22, 07-10-2017 | #14


Ветеран


Contributor


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

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


По маске {лабуда всякая}.??-??.{лабуда всякая}.cab удаляются все файлы, кроме исключений
Код: Выделить весь код
@Echo Off

Set "Mask=*.??-??.*cab"
Set "Exclude=.ru-RU. .en-GB. .en-US. .de-DE."

Set "BoxIn=%~dp0"
rem Set "BoxIn=%userprofile%\Desktop\ElsaWin"

Set "Log=%userprofile%\Desktop\%~nx0.log"

If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

Call :PushdLog "%Log%"
>~Exclude.tmp (For %%e IN (%Exclude%) DO Echo %%e)

>"%Log%" (FOR /F "usebackq delims=" %%f IN (`Xcopy "%BoxIn%\%Mask%" "%Tmp%" /Exclude:~Exclude.tmp /S /L`) DO (
	If Exist "%%f" Echo    Del "%%f" &Del /F "%%f" 2>&1 
))
Del ~Exclude.tmp
Popd
GoTo :Eof

:PushdLog
	Pushd "%~dp1"
GoTo :Eof
Удаляет всё по маске в указанной папке и подпапках. Если надо удалить только в папке, уберите ключ /S в Xcopy

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


Отправлено: 17:38, 07-10-2017 | #15


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


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

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


А примерно такие то же удалит?
control#51.xml
delConfigItem.js
elfi.cab
slp.V.#graphics.17.cab

Отправлено: 17:40, 07-10-2017 | #16


Ветеран


Contributor


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

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


oniava, Мы разговаривали о файлах типа {лабуда всякая}.??-??.{лабуда всякая}.cab
Файлы с иными масками команды удалять не поступало.
Что Вам точно надо?
Если надо угрохать все файлы, кроме исключений, укажите маску
Set "Mask=*.*"
Опишите при этом в батнике корректно путь к папке и, не дай бог, не ставьте батник внутрь этой папки - батник убьет сам себя.
И, если можно, окружите скрины в Ваших постах тегом Spoiler /Spoiler, тяжело читать тему.

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


Последний раз редактировалось megaloman, 07-10-2017 в 17:52.

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

Отправлено: 17:43, 07-10-2017 | #17


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


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

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


Цитата megaloman:
Мы разговаривали о файлах типа {лабуда всякая}.??-??.{лабуда всякая}.cab
Файлы с иными масками команды удалять не поступало. »
Примерно так и надо.

Сейчас опробую Ваш скрипт.
На копирование Папки для "опробования скрипта", много времени уходит...

Отправлено: 17:52, 07-10-2017 | #18


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


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

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


Цитата megaloman:
@Echo Off
Set "Mask=*.??-??.*cab"
Set "Exclude=.ru-RU. .en-GB. .en-US. .de-DE."
Set "BoxIn=%~dp0"
rem Set "BoxIn=%userprofile%\Desktop\ElsaWin"
Set "Log=%userprofile%\Desktop\%~nx0.log"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"
Call :PushdLog "%Log%"
>~Exclude.tmp (For %%e IN (%Exclude%) DO Echo %%e)
>"%Log%" (FOR /F "usebackq delims=" %%f IN (`Xcopy "%BoxIn%\%Mask%" "%Tmp%" /Exclude:~Exclude.tmp /S /L`) DO (
If Exist "%%f" Echo Del "%%f" &Del /F "%%f" 2>&1
))
Del ~Exclude.tmp
Popd
GoTo :Eof
:PushdLog
Pushd "%~dp1"
GoTo :Eof »
Ваш новый скрипт удаляет, но всё равно не все файлы.

Некоторые остаются.

Маска поиска не подходит похоже.

slp.N.es-ES#graphics.cab
www..hr-HR#llf.cab
и т.п.

Скоро докачается новый архив у меня, попробую такой вот код:
Код: Выделить весь код
Set "BoxIn=%~dp0"
Set "Ext=*.??-*.cab"
Set "Exclude=*ru-RU* *en-GB* *en-US* *de-DE*"
Set "Log=%userprofile%\Desktop\%~nx0.log"

pushd "%BoxIn%" || (pause & exit /b)
del "%Log%" 2>NUL

set nS=0& set /a nF=0
FOR /f "delims=" %%f IN ('dir /b /a-d %Exclude%') DO set ""%%~nxf"=1"
FOR %%f IN ("%BoxIn%\%Ext%") DO if not Defined "%%~nxf" (
  del /f /a "%BoxIn%\%%~nxf" &&(>>"%Log%" echo Удалено: "%%~nxf"& set /a nS+=1) ||(>>"%Log%" Не удалено: "%%~nxf" & set /a nF+=1)
)
(echo Результат выполнения:
echo Удалено файлов: %nS%
echo Не удалено файлов: %nF%
popd) >> "%Log%"
type "%Log%"
pause
Потом отпишу.

Отправлено: 20:07, 07-10-2017 | #19


Ветеран


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

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


oniava, как Вам уже сказали выше — убирайте большие скриншоты или их большое количество под тэг «spoiler».

Цитата oniava:
На копирование Папки для "опробования скрипта", много времени уходит... »
Используйте Robocopy для создания структуры папок и нулевого размера файлов:
Цитата robocopy.exe /?:
/CREATE :: Создать только дерево папок и файлы нулевой длины.
— будет быстро.

Отправлено: 21:30, 07-10-2017 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - скрипт по копирвоанию и последующего удаления файлов по маске названия файла santey007 Скриптовые языки администрирования Windows 19 22-12-2015 10:43
CMD/BAT - [решено] Нужен bat-ник для поиска и удаления файлов и папок по маске Nun-Nun Скриптовые языки администрирования Windows 14 08-11-2014 09:53
CMD/BAT - Создать bat'ник для автоматической очистки папок временных файлов каждые 2 часа THEDOGG Скриптовые языки администрирования Windows 5 05-03-2013 18:39
CMD/BAT - [решено] Очень нужен Bat-ник, копирующий всю структуру папок и файлов, чтоб каждый файл занима GoldenSuslik2 Скриптовые языки администрирования Windows 7 13-06-2011 15:17




 
Переход