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

Stolc 19-12-2018 11:52 2846980

BAT-скрипт удаления файлов
 
Привет!
В папке находится 60 тыс файлов. У всех название сформировано по маске _дата_название_id.jpg Например, _20181212_розы_544.jpg.
И есть файл со значениями id для удаления. Эти id в файле расположены в столбец, один id на одну строку.
Как сделать скрипт, который удалял бы все файлы, в названии которых есть id, указанный в файле?
Или это только отдельную прогу писать?

Busla 19-12-2018 12:09 2846985

Код:

echo off
for /f "usebackq delims=" %%i in ("C:\list.txt") do dir /B *_%%i.jpg

выводит список файлов, для удаления - заменить dir /B на del

alpap 19-12-2018 14:25 2847021

Busla, Stolc,
под один код много чего попадет, ведь код один и тот же может быть у многих файлов, точно дата или имя не будут играть роли?
Файл 155566

Busla 19-12-2018 20:25 2847097

alpap, id - сокращение от identificator
и по формулировке самой задачи видно что под id подразумевается идентификатор

alpap 19-12-2018 22:58 2847112

Цитата:

Цитата Busla
под id подразумевается идентификатор »

да понятно это все и я ничего не имею против, только ТС иногда поздно вспоминают что не совсем четко описали условие задачи, поэтому на скрине специально привел возможные варианты из которых точно можно сказать так надо или дополнительно, например, в рамках одной даты.

engeltud 21-05-2021 12:57 2958582

Может кто-то и поможет с написанием скрипта...
Задача следущая:

Есть в папке файлы с названиями типа: имя_rabota+два числа.jpg

mama_myla_ramu_rabota01.jpg, mama_myla_ramu_rabota02.jpg, mama_myla_ramu_rabota03.jpg
papa_rubil_drova_rabota01.jpg, papa_rubil_drova_rabota02.jpg
syn_spal_doma_rabota01.jpg

Результат: после удаления должен остатся файл с найбольшим числом в конце в своей группе:

mama_myla_ramu_rabota03.jpg, papa_rubil_drova_rabota02.jpg, syn_spal_doma_rabota01.jpg

и ещё последний файл в своей группе отличается существенно в своем размере от других. Может как-то ещё поможет в сортировке и удалении.

DJ Mogarych 21-05-2021 13:16 2958583

Цитата:

Цитата engeltud
отличается существенно в своем размере от других »

В какую сторону?

engeltud 21-05-2021 13:34 2958587

в большую, но лучше удалять по названию. Если есть возможность, тогда два отдельных скриптa по двум признакам. Я думаю, что удаление за признаком размера будет сложнее чем по названию.

DJ Mogarych 21-05-2021 13:45 2958589

Powershell
Код:

cd D:\temp\test

# По имени
(dir).BaseName -replace "\d{2}$" |sort -Unique |% {dir -filter "*$_*" |select -SkipLast 1 |del -WhatIf}
# По размеру
(dir).BaseName -replace "\d{2}$" |sort -Unique |% {dir -filter "*$_*" |sort length |select -SkipLast 1 |del -WhatIf}


megaloman 21-05-2021 16:15 2958605

CMD по имени
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Find=^.*[0-9][0-9]\.jpg$"

        For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /O:-N "%BoxIn%\*.*" ^| findstr.exe /R /I /C:"%Find%"`) Do (
                If Exist "%BoxIn%\%%f" (
                        Set "Name=%%~nf"
                        For /f "usebackq skip=1 delims=" %%i In (`2^>nul Call Dir /B /A:-D /O:-N "%BoxIn%\%%Name:~0,-2%%*.*" ^| findstr.exe /R /I /C:"%Find%"`) Do Del "%BoxIn%\%%i"
                )
        )
pause
Exit /B

Если по размеру, заменить /O:-N на /O:-S
во втором For

ShaddyR 06-07-2021 15:16 2961535

слегка вклинюсь: меня тут реакция командного процессора M$ на простую задачу ввела в задумчивость. А именно: попросил зачистить темповские хвосты от rar'а, вида __rar_<цифры>.<цифры>, на всём диске, где намусорил, собака. Ничтоже сумняшеся, дал команду
del x: /f /s /q "__rar_*"
Побёг лог убиваемого, который мне намекнул на то, что на самом деле всё совсем не так, как в реальности: эта дура стала сносить всё подряд, вне зависимости от типа, пути и имени файла. Вопрос: WHY???
ЗЫ: несмертельно, заодно увидел пару лишних папок в логе, приберу с архива, но по факту - непонятно.

iglezz 06-07-2021 19:36 2961572

ShaddyR,
Цитата:

Цитата ShaddyR
Вопрос: WHY??? »

Опечатка с потерянным x:?
Команда del x: /f /s /q "__rar_*" удалит сначала X:, затем "__rar_*". Для сей команды порядок ключей и имён/масок файлов/каталогов не важен.

greg zakharov 06-07-2021 21:15 2961588

У ShaddyR подпись нужно сменить на "Кирпичных Дел Мастер".

ShaddyR 07-07-2021 01:59 2961596

Цитата:

Цитата iglezz
Опечатка с потерянным x:? »

то бишь, "x:\__rar_*" ?
Тоже не вяжется:
Цитата:

Цитата iglezz
Команда del x: /f /s /q "__rar_*" удалит сначала X: »

что невозможно по определению, не так ли? А вот дальше - см. п.1 -
Цитата:

Цитата ShaddyR
Побёг лог убиваемого, который мне намекнул на то, что на самом деле всё совсем не так, как в реальности: эта дура стала сносить всё подряд, вне зависимости от типа, пути и имени файла. »

Повторюсь еще раз: в имени убитых файлов не было ни намёка на ни на rar, ни на __ и уж никак не на какие-либо их совмещения. Эта команда НЕ ДОЛЖНА БЫЛА убить ничего лишнего, вот в чем соль. Иначе - обоснуй, где я свернул в нетуда.
>
Захаров, тебе лично могу организовать юбилейную подарочную перманентную подпись БАЛАБОЛ. Не желаешь? Есть что по сути сказать?

Iska 07-07-2021 04:42 2961599

ShaddyR, это не так работает.

1. Команда del принимает в качестве аргументов множественные имена файлов/масок:
del /?
Код:

Удаление одного или нескольких файлов.

DEL [/P] [/F] [/S] [/q] [/A[[:]атрибуты]] имена
ERASE [/P] [/F] [/S] [/q] [/A[[:]атрибуты]] имена

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

  /P            Запрос подтверждения перед удалением каждого файла.
  /F            Принудительное удаление файлов, доступных только для чтения.
  /S            Удаление указанных файлов из всех подкаталогов.
  /Q            Отключение запроса на подтверждение при удалении файлов.
  /A            Отбор файлов для удаления по атрибутам.
  атрибуты      R  Файлы, доступные только для чтения.
                S  Системные файлы.
                H  Скрытые файлы.
                A  Файлы, готовые для архивирования.
                I  Файлы с неиндексированным содержимым.
                L  Точки повторной обработки.
                -  Префикс "-" имеет значение НЕ.

Изменение команд DEL и ERASE при включении расширенной обработки команд:

Результаты вывода для ключа /S принимают обратный характер, то есть выводятся
только имена удаленных файлов, а не файлов, которые не удалось найти.


В указанном примере таких аргументов два: «x:» и «"__rar_*"».

2. «x:» в данном контексте означает: «все файлы текущего каталога диска x:», поскольку, коль ни имя файла, ни маска файлов не заданы — к пути «x:» применяется умолчальная маска «*.*». Если специально текущий каталог для диска не менялся — им будет по умолчанию корневой каталог. Отсюда — фактически применяется такое: «x:\*.*».

3. И токмо опосля пытается найти и удалить файлы по маске «__rar_*» в текущем каталоге текущего диска.

В общем, как всегда: умолчания — зло.

greg zakharov 07-07-2021 09:03 2961602

Цитата:

Цитата ShaddyR
Есть что по сути сказать?

По сути:
1.настоящий мастер не станет заниматься копипастом кода, не осмыслив его содержимое, а значит не будет постить сообщения подобные этому:
Цитата:

Цитата ShaddyR
эта дура стала сносить всё подряд, вне зависимости от типа, пути и имени файла. Вопрос: WHY???

2.отрицание вами объективного (см. аргумент выше) укажет лишь на ограниченность (вашу)
3.отсутствие самоиронии (и как следствие, чувство юмора) обычно указывает на озлобленность человека (главным образом из-за жизненных неудач)
4.злоупотребление положением модератора, в частности угрозы
Цитата:

Цитата ShaddyR
организовать юбилейную подарочную перманентную подпись БАЛАБОЛ

лишь дополняют аргументацию не в вашу пользу

YuS_2 07-07-2021 09:11 2961603

Цитата:

Цитата Iska
2. «x:» в данном контексте означает: «все файлы текущего каталога диска x:», поскольку, коль ни имя файла, ни маска файлов не заданы — к пути «x:» применяется умолчальная маска «*.*». Если специально текущий каталог для диска не менялся — им будет по умолчанию корневой каталог. Отсюда — фактически применяется такое: «x:\*.*».
3. И токмо опосля пытается найти и удалить файлы по маске «__rar_*» в текущем каталоге текущего диска.
В общем, как всегда: умолчания — зло.»

Следует ещё добавить, что в таких случаях, когда используются маски типа "x:" (а это именно маска, т.к. отсутствует конкретное имя и подставляется "x:\*.*"), ключ /s (рекурсия), вообще вселенское зло, т.к. команда DEL с таким набором ключей, будет почти аналогичной "format x:"... :)

ShaddyR 09-07-2021 01:50 2961762

Цитата:

Цитата Iska
В общем, как всегда: умолчания — зло. »

Цитата:

Цитата YuS_2
когда используются маски типа "x:" (а это именно маска, т.к. отсутствует конкретное имя и подставляется "x:\*.*"), »

да какой же ебил решил, что если я не указал маску - значит, ее надо придумать за меня? Я же ему сказал дословно "где" и "что именно", сфигали лезть интеллект проявлять? Понял, спасибо, буду внимательнее читать хелп. В любом случае, инцидент много о чем напомнил и был даже весьма полезен, как я и написал выше.
>
Захаров,
Скрытый текст
строить из себя психолога будешь в другом месте, здесь ни конференция вообще, ни раздел или тема в частности не подходят. Остальные инсинуации - следствие твоей (само)уверенности в том, что ты что-то знаешь обо мне и много о людях. В двух словах - вообще мимо, во всех "аргументах". Почему - можешь попробовать применить свою аналитику на себя - может, чего узнаешь нового. Это же касается и вымышленной "угрозы" - перечитай это сообщение заново, оно содержит ответ и на этот "вопрос". Если желаешь поспорить и доказать, как ты немеряно крут в понимании других - ЛС к твоим услугам, там же я тебе все расскажу более подробно... если захочешь ;)

Iska 09-07-2021 06:20 2961770

ShaddyR, в любом случае, это было ещё до MS DOS.

YuS_2 09-07-2021 09:19 2961782

Цитата:

Цитата ShaddyR
да какой же ебил решил, что если я не указал маску - значит, ее надо придумать за меня? »

Хоть я и ругаю иногда микрософт за его недосмотры, но в данном случае, возможно, я сам выразился недостаточно верно.
Если заглянуть в хелп, там указано:
Цитата:

имена Список из одного или нескольких файлов или каталогов.
Для удаления группы файлов можно использовать подстановочные
знаки. Если указан каталог, будут удалены все файлы в этом
каталоге.
То бишь, в данном случае, x: - это каталог (ну или иначе - диск с корневым каталогом, согласно синтаксису CMD), а ключ /s - рекурсия, т.е. скрипт выполняет вполне то, что ему указано, несмотря на имя "__rar_*", которое для скрипта не является именем файла, это может быть и каталог, и файл. Т.о. для него, это два имени "x:" и "__rar_*", которые он и обрабатывает.
В общем, переходите на powershell, для таких задач он более вменяем, с точки зрения конкретных настроек и кроме того, существует возможность везде явно отделять каталоги от файлов.

greg zakharov 09-07-2021 10:36 2961787

Цитата:

Цитата ShaddyR
да какой же ебил

Ненормативная лексика от модератора - явление нормальное, а сарказм, влекущий за собой пертурбации (которые оправданием никак и не назвать) и обвинение в инсинуациях... - вот она политика двойных стандартов.То же было и с другим "рукой водителем" форума. Тот, правда, до мата не опускался, а лишь истерил и обвинял во всевозможных смертных грехах, а чтобы не последовало опровержений, позаботился о бане оппонента, очевидно полагая, что последний спустится до его уровня и будет оправдываться. Это форум обиженных модеров с админами или профессионалов?

ShaddyR 09-07-2021 13:35 2961800

Захаров,
Скрытый текст
не переигрывай - умные слова тебе не идут. Попытка разглядеть несуществующее и акцентировать внимание на несущественном показывает несостоятельность тебя как оппонента в споре. А намеренное несоблюдение правил ОПК при игнорировании намёков администрации ни к чему хорошему обычно не приводят. Еще раз настоятельно прошу перестать из себя корчить того, кем ты не являешься - здесь твои потуги в этом направлении никому не интересны. Если тебя не устраивает содержание сообщений участников (каковым в данном разделе являюсь и я) - воспользуйся доступными в интерфейсе средствами, для "поговорить" используй систему ЛС. Не добавляй своим ЧСВ работы местному модератору - ему, поверь, и без тебя есть чем заняться. Спасибо.

greg zakharov 09-07-2021 15:57 2961812

ShaddyR, о том и речь. Мой сарказм воспринят неадекватно с вашей, замечу, стороны. По части нарушения сводов форума, мат был с вашей стороны, пусть и в адрес третьих лиц. Так что тыкать правилами, не видя бревна в собственном глазу, по меньшей мере странно.
Что вы там себе ЧСВ, дело ваше личное.

Petya V4sechkin 12-07-2021 12:29 2961978

Добавлю пару слов специально для greg zakharov, чтобы он не думал, будто бан вызван чьей-то личной неприязнью. Бан не столько за одно конкретное нарушение, сколько за многократные рецидивы, по совокупности. Если greg zakharov раз за разом, явно или завуалированно хамит другим участникам форума, получая за это предупреждения и баны, то он мог бы уже наконец сообразить, что проблема не в окружающих, а в нём самом, как-то отрефлексировать ситуацию.


Время: 02:42.

Время: 02:42.
© OSzone.net 2001-