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

Аватара пользователя
Iska

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение Iska »

oniava,


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

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение oniava »

Цитата 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
CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла




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




Цитата 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
CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла





Цитата megaloman:



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




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



Код:

Код: Выделить всё

:: Где ищем
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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение oniava »

Может кому пригодится.

Вот этот скрип полностью на 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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение oniava »

Цитата Iska:



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

Цитата robocopy.exe /?:
CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла




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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение alpap »

oniava,


Цитата oniava:



полностью на 100%
CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла




ну не надо ля-ля

вот это не может работать



Код:

Код: Выделить всё

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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение Iska »

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



Код:

Код: Выделить всё

/^.*\.(?:cs-CZ|da-DK|el-GR|es-ES|…|zh-TW).*\.cab$/i
Аватара пользователя
El Sanchez

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение El Sanchez »

Цитата oniava:



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

нужно оставить файлы с языками это: ru-RU - русский, en-GB - английский (Великобритания), en-US - английский (США), de-DE - немецкий.

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




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

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение oniava »

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





Фото-пример

[spoiler]Изображение[/spoiler]
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Нужен bat-ник для поиска и удаления файлов и папок по части названия файла

Сообщение DJ Mogarych »

Есть.



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

Вернуться в «Скриптовые языки администрирования Windows»