Войти

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


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

megaloman
07-10-2017, 22:39
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
@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 »
Этот код не работает. Он удаляет и то, что надо оставить то же.

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

Просмотрите, какие бывают файлы, выпишите все маски, пропишите в батнике »
Это я вернулся к тому, что было у меня:
:: Где ищем
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
Может кому пригодится.
Вот этот скрип полностью на 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
Используйте Robocopy для создания структуры папок и нулевого размера файлов:
Цитата robocopy.exe /?: »
Попробовал, спасибо Iska, действительно быстрее!

alpap
08-10-2017, 12:36
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
oniava, вообще такие вещи куда быстрее делать в полуавтоматическом режиме посредством файловых менеджеров. Например, в Far Manager'е можно использовать регулярные выражения в масках выделения или поиска, наподобие:
/^.*\.(?:cs-CZ|da-DK|el-GR|es-ES|…|zh-TW).*\.cab$/i

El Sanchez
09-10-2017, 10:11
Есть папка к примеру 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
ну не надо ля-ля
вот это не может работать »
ну не знаю, у меня работает всё отлично.

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

https://i.ibb.co/kS6Znkb/awawe-studio-2024-07-31-082824.png

DJ Mogarych
01-08-2024, 10:15
Есть.

Powershell + ExifTool (https://exiftool.org/)

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




© OSzone.net 2001-2012