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

Компьютерный форум 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

 

Ветеран


Contributor


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

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


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
Просмотрите, какие бывают файлы, если еще что-то останется, выпишите все маски, пропишите в батнике

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


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


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



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

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


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


Сообщения: 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 »
Этот код не работает. Он удаляет и то, что надо оставить то же.

Цитата 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 БОЛЬШОЕ за помощь.
Что нибудь придумаю.

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


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


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

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


Может кому пригодится.
Вот этот скрип полностью на 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

Отправлено: 00:03, 08-10-2017 | #23


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


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

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


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

Отправлено: 11:42, 08-10-2017 | #24


Ветеран


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

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


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
Будет работать
Найдите отличия

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


Отправлено: 12:36, 08-10-2017 | #25


Ветеран


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

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


oniava, вообще такие вещи куда быстрее делать в полуавтоматическом режиме посредством файловых менеджеров. Например, в Far Manager'е можно использовать регулярные выражения в масках выделения или поиска, наподобие:
Код: Выделить весь код
/^.*\.(?:cs-CZ|da-DK|el-GR|es-ES||zh-TW).*\.cab$/i

Отправлено: 22:24, 08-10-2017 | #26


Аватара для El Sanchez

Ветеран


Contributor


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

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


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

Отправлено: 10:11, 09-10-2017 | #27


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


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

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


Цитата alpap:
ну не надо ля-ля
вот это не может работать »
ну не знаю, у меня работает всё отлично.

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


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


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

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


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

Фото-пример

Отправлено: 23:08, 31-07-2024 | #29


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Есть.

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 чувствительны к регистру.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 10:15, 01-08-2024 | #30



Компьютерный форум 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




 
Переход