Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Нужен bat-ник для поиска и удаления файлов и папок по части названия файла (http://forum.oszone.net/showthread.php?t=330311)

oniava 06-10-2017 17:11 2768764

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

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

Подробнее:

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

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



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

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

oniava 06-10-2017 18:02 2768777

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

Код:

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 2768789

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 2768797

:yahoo: :yahoo:
Цитата:

Цитата megaloman
В папке 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 2768818

Цитата:

Цитата megaloman
У меня выбираются только файлы, где в расширении есть имя языка (маска работает!). Остальные не рассматриваем и не покушаемся удалять. »

Если Ваш код 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 2768843

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

Для проверки поместите батник внутрь папки ElsaWin, которая у Вас на рабочем столе, и пропишите
Set "BoxIn=%~dp0"
Кроме того, я делал удаление только в указанной папке, подпапки не просматривал.
Вот вариант, который для папки и всех её подпапок для файлов по маске *.??-?? удаляет все файлы, кроме файлов с расширениями ru-RU en-GB en-US de-DE
Код:

@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 2768844

Цитата:

Цитата megaloman
oniava, Выполните в командном окне
dir "%userprofile%\Desktop\ElsaWin"
Там есть файлы? У меня, например, рабочий стол хранится в другом месте. Подозреваю, у Вас тоже, поэтому ничего не происходит. »

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


У меня рабочий стол именно здесь
Код:

%userprofile%\Desktop\ElsaWin
Цитата:

Цитата megaloman
Для проверки поместите батник внутрь папки 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 2768848

Цитата:

Цитата megaloman
Всё ясно, у Вас файлы с маской *.??-??.cab, а я делал для *.??-??. Необходима доработка. »

Ну так то да, я что то упустил и не сказал про расширение файлов.
Лог желательно на рабочий стол, что удали то хоть знать.

megaloman 07-10-2017 01:18 2768850

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 2768851

Закинул в папку с файлами этот батник.

Цитата:

Цитата megaloman
Код:
@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 2768857

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

Код:

@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 2768928

Цитата:

Цитата 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

oniava 07-10-2017 16:02 2768936

Здравствуйте 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 07-10-2017 16:22 2768942

Цитата:

Цитата 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

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

megaloman 07-10-2017 17:38 2768960

По маске {лабуда всякая}.??-??.{лабуда всякая}.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

oniava 07-10-2017 17:40 2768961

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

megaloman 07-10-2017 17:43 2768962

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

oniava 07-10-2017 17:52 2768968

Цитата:

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

Примерно так и надо.

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

oniava 07-10-2017 20:07 2769014

Цитата:

Цитата 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

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

Iska 07-10-2017 21:30 2769031

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

Цитата:

Цитата oniava
На копирование Папки для "опробования скрипта", много времени уходит... »

Используйте Robocopy для создания структуры папок и нулевого размера файлов:
Цитата:

Цитата robocopy.exe /?
/CREATE :: Создать только дерево папок и файлы нулевой длины.

— будет быстро.

megaloman 07-10-2017 22:39 2769049

oniava,
Вот вариант для нескольких масок.
Код:

@Echo Off

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

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

Call :InMask %Mask%

Del ~Exclude.tmp
Popd
GoTo :Eof

:InMask
        >"%Log%" (For /F "usebackq delims=" %%f IN (`Xcopy "%BoxIn%\%~1" "%Tmp%" /Exclude:~Exclude.tmp /S /L 2^>nul`) DO (
                If Exist "%%f" Echo    Del "%%f" &Del /F "%%f" 2>&1
        ))
        Shift
        If Not "%~1"=="" GoTo :InMask
GoTo :Eof

:PushdLog
        Pushd "%~dp1"
GoTo :Eof

Просмотрите, какие бывают файлы, если еще что-то останется, выпишите все маски, пропишите в батнике

oniava 07-10-2017 22:50 2769054

Цитата:

Цитата 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 »

Этот код не работает. Он удаляет и то, что надо оставить то же.

Цитата:

Цитата megaloman
@Echo Off
Set Mask="*.??-??.*cab" "*.??-??#*cab"
Set "Exclude=.ru-RU. .en-GB. .en-US. .de-DE. .ru-RU# .en-GB# .en-US# .de-DE#"
rem Set "BoxIn=%~dp0"
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)
Call :InMask %Mask%
Del ~Exclude.tmp
Popd
GoTo :Eof
:InMask
>"%Log%" (For /F "usebackq delims=" %%f IN (`Xcopy "%BoxIn%\%~1" "%Tmp%" /Exclude:~Exclude.tmp /S /L 2^>nul`) DO (
If Exist "%%f" Echo Del "%%f" &Del /F "%%f" 2>&1
))
Shift
If Not "%~1"=="" GoTo :InMask
GoTo :Eof
:PushdLog
Pushd "%~dp1"
GoTo :Eof »

Цитата:

Цитата megaloman
Просмотрите, какие бывают файлы, выпишите все маски, пропишите в батнике »

Это я вернулся к тому, что было у меня:
Код:

:: Где ищем
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* *lt-LT* *lv-LV* *mk-MK* *nb-NO* *pt-BR* *sr-YU* *uk-UA* *zh-CHS* *bg-BG* *et-EE* *zh-TW* *zh-TW* *id-ID* *ms-MY* *nl-BE* *sr-SP* *zh-SG*"

:: Что оставляем
:: en-GB, en-US, de-DE, ru-RU

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 > %userprofile%\Desktop\loglist.txt
for %%J in (".") do echo. & echo. - Удалено: %n% файлов & echo. & echo. - Из папки: %%~nJ
echo.
Pause
Pause >NUL
EndLocal
Exit /B

но это плохо!
Языки меняются в папках и добавляются порой новые.

Ладно, спасибо Вам megaloman БОЛЬШОЕ за помощь.
Что нибудь придумаю.

oniava 08-10-2017 00:03 2769061

Может кому пригодится.
Вот этот скрип полностью на 100%, справляется с поставленной задачей:
Код:

@echo off
SetLocal EnableExtensions 
chcp 866 >NUL

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


oniava 08-10-2017 11:42 2769115

Цитата:

Цитата Iska
Используйте Robocopy для создания структуры папок и нулевого размера файлов:
Цитата robocopy.exe /?: »

Попробовал, спасибо Iska, действительно быстрее!

alpap 08-10-2017 12:36 2769129

oniava,
Цитата:

Цитата oniava
полностью на 100% »

ну не надо ля-ля
вот это не может работать
Код:

if not Defined "%%~nxf"
по вашему вывод так можно сделать
Код:

@echo on
::1111.txt
::11a11.txt
::1b2.txt
::22c.txt
::d44.txt
::eee.txt
set "Exclude=*a* *b* *c* *d*"

set nS=0& set /a nF=0
for /f "delims=" %%f in ('dir /b /a-d %Exclude%') do set ""%%~nxf"=1"
echo %"%%~nxf"% :& Должна существовать ТАКАЯ переменная?
pause

проверьте и убедитесь в вылете.

Вот так
Код:

@echo on
::11aa234.txt
::b2345.txt
::cccc.txt
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d/b *a*.txt *b*.txt') do (
 set "%%~nxa=Exclude"
 if defined %%~nxa echo файл: "%%a" в исключение
 rem или
 if "!%%~nxa!"=="Exclude" echo файл: "%%a" в исключение
)
pause

Будет работать
Найдите отличия :)

Iska 08-10-2017 22:24 2769252

oniava, вообще такие вещи куда быстрее делать в полуавтоматическом режиме посредством файловых менеджеров. Например, в Far Manager'е можно использовать регулярные выражения в масках выделения или поиска, наподобие:
Код:

/^.*\.(?:cs-CZ|da-DK|el-GR|es-ES||zh-TW).*\.cab$/i

El Sanchez 09-10-2017 10:11 2769304

Цитата:

Цитата oniava
Есть папка к примеру E:\VW\6.Base_02.2015 (до 40 Гб файл)
нужно оставить файлы с языками это: ru-RU - русский, en-GB - английский (Великобритания), en-US - английский (США), de-DE - немецкий.
»

oniava, для боеготовности удалить выделенное:
Код:

@Echo Off
SetLocal

Set Source=E:\VW\6.Base_02.2015
For /F "tokens=*" %%? In ('Dir /B "%Source%\*??-??*" 2^>nul^|Find /i /v "ru-RU"^|Find /i /v "en-GB"^|Find /i /v "en-US"^|Find /i /v "de-DE"') Do Echo:Del /f /q "%%~f?"


oniava 12-10-2017 12:12 2769995

Цитата:

Цитата alpap
ну не надо ля-ля
вот это не может работать »

ну не знаю, у меня работает всё отлично.

Sled_V_istorii 31-07-2024 23:08 3029513

А если требуется удалить не по названию файла, а по части названия песни? Например удалить все файлы где присутствует "fsx" "DAL" "fr" "es" "it" "de" Вручную фильтровать 10К файлов это слишком долго. Может есть более быстрое решение?

Фото-пример

DJ Mogarych 01-08-2024 10:15 3029521

Есть.

Powershell + ExifTool
Код:

$exiftool = 'C:\scripts\exiftool.exe'
$dir = 'C:\Temp\folder_with_audiofiles'
$regex = 'fsx|DAL|fr|es|it|de'

cd $dir
(& $exiftool -s3 -filename -title -T . |ConvertFrom-Csv -Delimiter "`t" -Header "filename","title"|? title -CMatch $regex).filename |del -WhatIf

Чтобы реально удаляло, уберите -WhatIf.
Значения в $regex чувствительны к регистру.


Время: 07:32.

Время: 07:32.
© OSzone.net 2001-