Войти

Показать полную графическую версию : Нужен bat-ник для поиска и удаления файлов и папок по части названия файла


Страниц : [1] 2

oniava
06-10-2017, 17:11
Здравствуйте.

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

Подробнее:

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

В ней куча файлов
http://s002.radikal.ru/i198/1710/83/30e142c392a1.png


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

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

oniava
06-10-2017, 18:02
Поиск файлов которые мне не нужны, реализовал для пробы таким образом:

where /R E:\VW\6.Base_02.2015 *cs-CZ* *da-DK* *el-GR* *es-ES* *fi-FI* *fr-CA* *fr-FR* *hr-HR* *hu-HU* *it-IT* *ja-JP* *ko-KR* *nl-NL* *pl-PL* *pt-PT* *ro-RO* *sk-SK* *sl-SI* *sv-SE* *th-TH* *tr-TR* *zh-CN* *zh-TW* > %userprofile%\Desktop\loglist.txt

с выводом в логе найденных файлов.
Ищет команда правильно и все файлы какие надо.

Как совместить поиск с удалением найденного?

megaloman
06-10-2017, 19:45
oniava, В папке Z:\Box_In\Manual (пропишите свой путь) для файлов по маске *.??-?? удалятся все файлы, кроме файлов с расширениями ru-RU en-GB en-US de-DE @Echo Off

Set "Exclude=ru-RU en-GB en-US de-DE"
Set "BoxIn=Z:\Box_In\Manual"
Set "Mask=*.??-??"

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

:DelLan
FOR %%e IN (%Exclude%) DO If /I "%~2"==".%%e" GoTo :Eof
Del %1
GoTo :EofНет проблем добавить лог, если нужен.

oniava
06-10-2017, 20:47
:yahoo: :yahoo: В папке Z:\Box_In\Manual (пропишите свой путь) для файлов по маске *..??-?? удалятся все файлы, кроме файлов с расширениями ru-RU en-GB en-US de-DE »
Все удалять нельзя, в папке есть файлы и без имени языка...

Думаю сделать так:

Батник закидываем в папку с файлами и оттуда запускаем.

@Echo off
SetLocal EnableExtensions
chcp 866 >NUL

cd /d "%~dp0"

set mask="*cs-CZ* *da-DK* *el-GR* *es-ES* *fi-FI* *fr-CA* *fr-FR* *hr-HR* *hu-HU* *it-IT* *ja-JP* *ko-KR* *nl-NL* *pl-PL* *pt-PT* *ro-RO* *sk-SK* *sl-SI* *sv-SE* *th-TH* *tr-TR* *zh-CN* *zh-TW*"

2>NUL (for /f "delims=" %%A in ('"dir /b /a:-d "%mask%""') do (
set /a n+=1
))
if "%n%" LSS "1" echo. & echo. & echo. - Заданных файлов не найдено .. & echo. & echo. - Нажмите любую клавишу для выхода .. & Pause >NUL & goto :EOF
del /f /a /q /S "%mask%" 2>NUL 1>&2
for %%J in (".") do echo. & echo. - Удалено: %n% файлов & echo. & echo. - Из папки: %%~nJ
Pause >NUL
EndLocal
Exit /B

И даже работает :yahoo:

oniava
06-10-2017, 21:52
У меня выбираются только файлы, где в расширении есть имя языка (маска работает!). Остальные не рассматриваем и не покушаемся удалять. »
Если Ваш код megaloman отработает действительно так как пишите, то моё почтение Вам.
---------------------------------------------------------------------------------------------------
Папка ElsaWin и батник ElsaWin_Delit - копия.bat лежат на рабочем столе.

@echo off

Set "Exclude=ru-RU en-GB en-US de-DE"
Set "BoxIn=%userprofile%\Desktop\ElsaWin"
Set "Mask=*..??-??"

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

:DelLan
FOR %%e IN (%Exclude%) DO If /I "%~2"==".%%e" GoTo :Eof
Del %1% >
GoTo :Eof

Это код батника ElsaWin_Delit - копия.bat

При запуске вашего кода, с папкой ElsaWin ничего не происходит!

Ваш код megaloman нечего не делает почему то!

megaloman
07-10-2017, 00:12
oniava, Выполните в командном окне
dir "%userprofile%\Desktop\ElsaWin"
Там есть файлы? У меня, например, рабочий стол хранится в другом месте. Подозреваю, у Вас тоже, поэтому ничего не происходит.
И вообще, плохая идея экспериментировать с удалением файлов на рабочем столе, это опасно. Создайте папочку где-нибудь на диске в другом месте.

Для проверки поместите батник внутрь папки ElsaWin, которая у Вас на рабочем столе, и пропишите
Set "BoxIn=%~dp0"
Кроме того, я делал удаление только в указанной папке, подпапки не просматривал.
@Echo Off

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

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

Set "Mask=*.??-??"

FOR /R "%BoxIn%" %%f IN ("%Mask%") DO Call :DelLan "%%f" "%%~xf"
GoTo :Eof

:DelLan
FOR %%e IN (%Exclude%) DO If /I "%~2"==".%%e" GoTo :Eof
Echo Del %1
Del %1
GoTo :EofЛибо поместите батник внутрь папки с файлами (сейчас сделано именно так), либо точно указывайте путь папки - тогда не имеет значения, где батник расположен. На всякий случай вывел на консоль отображение удаляемых файлов.
Кроме того, я уточнил маску файлов: вместо *..??-?? надо *.??-??

oniava
07-10-2017, 00:24
oniava, Выполните в командном окне
dir "%userprofile%\Desktop\ElsaWin"
Там есть файлы? У меня, например, рабочий стол хранится в другом месте. Подозреваю, у Вас тоже, поэтому ничего не происходит. »
http://s018.radikal.ru/i519/1710/e6/19644b00b512.png

У меня рабочий стол именно здесь
%userprofile%\Desktop\ElsaWin

Для проверки поместите батник внутрь папки ElsaWin, которая у Вас на рабочем столе »

Поместил в папку батник с этим кодом:
@Echo Off

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

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

Set "Mask=*..??-??"

FOR /R "%BoxIn%" %%f IN ("%Mask%") DO Call :DelLan "%%f" "%%~xf"
GoTo :Eof

:DelLan
FOR %%e IN (%Exclude%) DO If /I "%~2"==".%%e" GoTo :Eof
Echo Del %1
Del %1
GoTo :Eof

Запустил от имени администратора батник, но всё равно ничего не произошло, код не работает Ваш!

oniava
07-10-2017, 00:48
Всё ясно, у Вас файлы с маской *.??-??.cab, а я делал для *.??-??. Необходима доработка. »
Ну так то да, я что то упустил и не сказал про расширение файлов.
Лог желательно на рабочий стол, что удали то хоть знать.

megaloman
07-10-2017, 01:18
oniava, Всё ясно, у Вас файлы с маской *.??-??.cab, а я делал для *.??-??. Необходима доработка.@Echo Off

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

rem Set "BoxIn=%~dp0"
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@Echo Off

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

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

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

>"%Log%" (FOR /R "%BoxIn%" %%f IN ("%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

oniava
07-10-2017, 01:34
Закинул в папку с файлами этот батник.

Код:
@Echo Off
Set "Exclude=ru-RU en-GB en-US de-DE"
rem Set "BoxIn=%~dp0"
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 »

Он ничего не удалил но лог выдал такой:

Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.cs-CZ.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.da-DK.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.el-GR.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.es-ES.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.fi-FI.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.fr-FR.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.hr-HR.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.hu-HU.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.it-IT.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.ja-JP.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.nl-NL.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.pl-PL.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.pt-PT.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.ro-RO.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.sk-SK.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.sl-SI.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.sv-SE.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.N.tr-TR.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.V.cs-CZ.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.V.da-DK.cab"
Del "C:\Users\Oleg\Desktop\ElsaWin\au.V.el-GR.cab"
и т.д.

Второй код в батнике, вообще ничего не сделал и лог выдал пустой.

Попробовал в разных кодировках ваш код в батника сохранять, но не в 866, не 1251 не работает ваш код...

oniava
07-10-2017, 02:17
Подправил первую строку вашего кода:

@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

Батник отработал теперь, но по маске файлы не различает.
Удалил все файлы почему то...

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

oniava
07-10-2017, 16:02
Здравствуйте 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 записей о удалении.
Но удаление не полное, куча лишних файлов.

Вот скрины оставшихся файлов.
http://s018.radikal.ru/i519/1710/c1/96e52a92dc35.png
http://s018.radikal.ru/i528/1710/fe/87e6fff45918.png
http://s012.radikal.ru/i320/1710/a7/0b99e37e57cd.pn
http://s016.radikal.ru/i337/1710/6b/77ef2baf2470.png
http://s008.radikal.ru/i305/1710/ec/4435292e7d78.png
http://s018.radikal.ru/i503/1710/7c/ebffa2d35f25.png
http://s019.radikal.ru/i624/1710/87/c6d4cb83b1ef.png
http://s011.radikal.ru/i318/1710/02/db6a41737692.png
http://s018.radikal.ru/i518/1710/05/205b43901427.png

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

oniava
07-10-2017, 16:22
что не удалилось? Надо четко представлять вид имён файлов, чтобы корректно написать код »
Я на скринах обвел файлы которые должны были то же удалиться.

Файлы в папке могут быть разного вида, примерно:
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

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

megaloman
07-10-2017, 17:38
@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

oniava
07-10-2017, 17:40
А примерно такие то же удалит?
control#51.xml
delConfigItem.js
elfi.cab
slp.V.#graphics.17.cab

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

oniava
07-10-2017, 17:52
Мы разговаривали о файлах типа {лабуда всякая}.??-??.{лабуда всякая}.cab
Файлы с иными масками команды удалять не поступало. »
Примерно так и надо.

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

oniava
07-10-2017, 20:07
@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

Потом отпишу.

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

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




© OSzone.net 2001-2012