![]() |
удалить файлы по маске *_i.ext
Здравствуйте!
помогите удалить файлы пользователем задается например i1=2 i2=3 маска в виде "_i.Extension" и батник должен удалить все файлы в папке с хвостиком от 2 до 3 ![]() |
shadowbat, не совсем понятно что вам нужно.
Что такое i1=2 i2=3? Какая операционка? От имени администратора del \путь к папке\*_*.txt del \путь к папке\*_*.jpg и так далее. Зачем огород городить. Всё легко и просто через bat, cmd. Или так del \путь к папке\file*_*.txt |
i1=2 i2=3 - задается в начале бат файла два значения. например одно значение "2", второе значение "3"
бат удаляет все файлы по маске *_i.extension, где i в цикле сменяется с "2" до "3" с шагом 1 например есть сто разных имён с хвостиками от _0 до _5 (в сумме 600 разных файлов). нужно удалить все файлы с хвостиками от 2 до 3, чтобы остались хвостики 0,1,4,5, неважно какое там расширение (в сумме из 600 останется 400 файлов) похожий пример и показан на картинке в первом сообщении, в котором удаляются все файлы с хвостиками от "_2" до "_3" операционка Windows... del \путь к папке\*_*.txt слишком топорно перебирать все существующие расширения вручную так можно дойти до del \путь к папке\*_2.txt del \путь к папке\*_2.jpg del \путь к папке\*_2.doc del \путь к папке\*_3.txt del \путь к папке\*_3.jpg del \путь к папке\*_3.doc и еще сто похожих строк |
|
Код:
@echo off& setlocal enableextensions |
Цитата:
можно и вручную через поиск в експлорере ввести "_2." и удалить мышкой. зачем тогда тему создавать? Georgio спасибо огромное, все работает! |
а можно как то изменить, чтобы удалял не по маске *_i.*, а по маске *_i.extension ?
чтобы не удалял файлы типа file_1.file_0.jpg (если в i от 1 до 3, то он не должен этот файл удалять, а он удаляет) то есть если такая маска попадется случайно в середине имени файла |
Код:
@echo off& setlocal enableextensions |
спасибо
может я что то не так делаю или объясняю, но удалился файл, у которого в середине есть _2., хотя в конце _0 ![]() |
можно упростить и делать проверку просто на последний символ в имени файла
если он равен от 2 до 3 с шагом 1, то удалять файл например если есть File1.jpg File2.txt File3.jpg, то удалить файлы File2.txt и File3.jpg так наверное будет проще? |
а что в cmd/bat нет команды поиска справа налево или обрезка строки?
я вчера на vba за 15 минут это сделал. там же делов на две строчки. обрезать имя файла справа до точки и сверить последний символ в имени с i если совпадает, то удалить файл можно даже без проверки на наличие "_" во втором символе с конца имени файла ведь по маске можно застрять в середине имени. а так можно сразу сверять по крайнему символу справа задание же простое. тем более для местных профи по cmd/bat аналогично и для второй темы, в которой портянки тоже огромные такие Скрытый текст
key = Left(FileName, (InStrRev(FileName, ".")) - 2) & i & "." 'имя до расширения ext = Right(FileName, Len(FileName) - InStrRev(FileName, ".")) 'расширение итого на строке Fil eNa me_0.extension выдает key = Fil eNa me_i. ext = extension потом сверяется по key & ext и обрабатывается файл только вот cmd/bat я не так хорошо знаю, хотя особенного тут совсем нет ничего же либо поиск справа налево точки в имени файла либо обрезка имени файла по одному символу пока этим символом не будет точка а дальше находим крайний символ и по нему сверяем. как сделать хотя бы так топорно? |
Цитата:
Цитата:
Цитата:
Не забудьте только предварительно составить полный и корректный алгоритм, чтобы после очередной итерации внезапно не «вылезало» очередное позабытое требование. |
Цитата:
Цитата:
нужно было сделать обычный "простенький" батник, чтобы обычные другие люди могли удалить все файлы с ненужными хвостиками а тут оказывается это никак не сделать, если в имени файла есть повторяющиеся символы может их можно как то посчитать? например считает количество _ и ищет файлы по маске *_*_*_i.* (например если в файле три подчеркивания) или заменить все _ на ! кроме последнего. тогда маска _i.* будет приводить всегда в одно и то же место в имени файла, потому что символ _ будет только один получается четко такую задачу на cmd/bat не сделать и лучше делать это на vbs? я правильно понимаю, что если подобную задачу делать на cmd/bat, то нужно: 1. либо мириться с тем, что в имени файла должен быть один ключевой символ 2. либо в данном конкретном случае если указать маску *_[0-9].ext , где ext = например перебор txt, png, jpg - то будет сверяться именно та цифра перед расширением ? ведь если есть имя файла Fi_1.le_0.txt , то маска *_[0-9].ext выявит одно конкретное место, несмотря на два символа _ ? если вторая идея верная, то как можно добавить цикл перебора маски _[0-9].txt, _[0-9].jpg, _[0-9].png ? |
shadowbat, чтобы сделать любое: что пакетный файл, что скрипт WSH, або PowerShell — нужно с точностью описать алгоритм. Или хотя бы точное ТЗ. Желательно целиком и сразу. У Вас этого нет.
В большинстве случаев на маски вообще не рекомендую закладываться, поскольку можно очень хорошо «попасть». Один вариант Вы уже сами видели. Другой — при наличии в маске латиницы, а в перечне файлов — кириллицы. Цитата:
Скрытый текст
Код:
@echo off Update: Ах, да, совсем забыл написать — для реального удаления уберите «echo». |
Цитата:
да, я не написал "с учетом если в имени файла есть символы "_", пробелы, кириллица, иероглифы" этого уточнения не было, потому что я и сам не знал, что с обработкой строк в cmd есть некоторые проблемы и нельзя, чтобы дублировался знак "_" в имени в данном случае может быть ТЗ не было описано достаточно понятно в первом сообщении Цитата:
|
Цитата:
shadowbat, Вы, наверное, не поняли, в каком смысле здесь упомянута кириллица? Дело в том, что команды командной строки ("dir", "del", "copy", "move", "findstr", "find", "if", "for" и т. д., то есть те команды, которые синтаксически могут использовать подстановочные знаки) при работе с масками пользуются короткими именами, то есть стандартом "8.3", являющимся наследием "досовских" времён. Создание коротких имён по умолчанию включено на всех дисках во всех ОС, кроме Windows 8 и 8.1, в которых оно включено только для системного диска и подключаемых внешних жёстких дисков. Кириллические символы не могут присутсвовать в коротких именах, поэтому они заменяются на латинские. При совпадении какой-либо маски на латинице с частью коротких имён файлов или папок, имеющих "в миру" кириллические имена, происходит их обработка командой как подходящих под маску. Но от этого могут "пострадать" не только файлы и папки с кириллическими именами, но и любые файлы и папки, чьё имя длиннее 8-ми, а расширение длиннее 3-х символов. Выполните команду Код:
dir /b "%TEMP%\*~*" и Вы увидите чуть ли не всё содержимое папки "Temp", поскольку тильда присутсвует во всех коротких именах, не совпадающих с обычным именем. Особым "цинизмом" отличается команда Код:
del *.htm *.doc *.jpe которая удалит как файлы с объявленными расширениями, так и файлы с расширениями ".html", ".docx", ".jpeg" и т. п., так как их короткие имена будут оканчиватся также объявленными в маске расширениями. |
Цитата:
Цитата:
Цитата:
|
Время: 16:56. |
Время: 16:56.
© OSzone.net 2001-