|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] удалить файлы по маске *_i.ext |
|
CMD/BAT - [решено] удалить файлы по маске *_i.ext
|
Старожил Сообщения: 267 |
Здравствуйте!
помогите удалить файлы пользователем задается например i1=2 i2=3 маска в виде "_i.Extension" и батник должен удалить все файлы в папке с хвостиком от 2 до 3 ![]() |
|
Отправлено: 19:13, 03-01-2015 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать а что в 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 я не так хорошо знаю, хотя особенного тут совсем нет ничего же либо поиск справа налево точки в имени файла либо обрезка имени файла по одному символу пока этим символом не будет точка а дальше находим крайний символ и по нему сверяем. как сделать хотя бы так топорно? |
Последний раз редактировалось shadowbat, 04-01-2015 в 15:05. Отправлено: 14:44, 04-01-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
Цитата shadowbat:
Цитата shadowbat:
Не забудьте только предварительно составить полный и корректный алгоритм, чтобы после очередной итерации внезапно не «вылезало» очередное позабытое требование. |
|||
Отправлено: 15:05, 04-01-2015 | #12 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата:
Цитата:
нужно было сделать обычный "простенький" батник, чтобы обычные другие люди могли удалить все файлы с ненужными хвостиками а тут оказывается это никак не сделать, если в имени файла есть повторяющиеся символы может их можно как то посчитать? например считает количество _ и ищет файлы по маске *_*_*_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, 04-01-2015 в 15:58. Отправлено: 15:11, 04-01-2015 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать shadowbat, чтобы сделать любое: что пакетный файл, что скрипт WSH, або PowerShell — нужно с точностью описать алгоритм. Или хотя бы точное ТЗ. Желательно целиком и сразу. У Вас этого нет.
В большинстве случаев на маски вообще не рекомендую закладываться, поскольку можно очень хорошо «попасть». Один вариант Вы уже сами видели. Другой — при наличии в маске латиницы, а в перечне файлов — кириллицы. Цитата shadowbat:
Скрытый текст
@echo off
setlocal enableextensions enabledelayedexpansion
set /a iStart = 2
set /a iFinish = 3
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.*"`) do (
set sName=%%~ni
set sExt=%%~xi
for /l %%j in (%iStart%, 1, %iFinish%) do for /f "usebackq delims=" %%k in (
`echo !sName!^|findstr.exe "^.*_%%j$"`
) do echo del "%%~k!sExt!"
)
endlocal
exit /b 0
Update: Ах, да, совсем забыл написать — для реального удаления уберите «echo». |
|
Последний раз редактировалось Iska, 04-01-2015 в 17:25. Причина: Дополнение Отправлено: 17:10, 04-01-2015 | #14 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата:
да, я не написал "с учетом если в имени файла есть символы "_", пробелы, кириллица, иероглифы" этого уточнения не было, потому что я и сам не знал, что с обработкой строк в cmd есть некоторые проблемы и нельзя, чтобы дублировался знак "_" в имени в данном случае может быть ТЗ не было описано достаточно понятно в первом сообщении Цитата:
|
||
Последний раз редактировалось shadowbat, 04-01-2015 в 18:06. Отправлено: 17:57, 04-01-2015 | #15 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата Iska:
shadowbat, Вы, наверное, не поняли, в каком смысле здесь упомянута кириллица? Дело в том, что команды командной строки ("dir", "del", "copy", "move", "findstr", "find", "if", "for" и т. д., то есть те команды, которые синтаксически могут использовать подстановочные знаки) при работе с масками пользуются короткими именами, то есть стандартом "8.3", являющимся наследием "досовских" времён. Создание коротких имён по умолчанию включено на всех дисках во всех ОС, кроме Windows 8 и 8.1, в которых оно включено только для системного диска и подключаемых внешних жёстких дисков. Кириллические символы не могут присутсвовать в коротких именах, поэтому они заменяются на латинские. При совпадении какой-либо маски на латинице с частью коротких имён файлов или папок, имеющих "в миру" кириллические имена, происходит их обработка командой как подходящих под маску. Но от этого могут "пострадать" не только файлы и папки с кириллическими именами, но и любые файлы и папки, чьё имя длиннее 8-ми, а расширение длиннее 3-х символов. Выполните команду , и Вы увидите чуть ли не всё содержимое папки "Temp", поскольку тильда присутсвует во всех коротких именах, не совпадающих с обычным именем. Особым "цинизмом" отличается команда , которая удалит как файлы с объявленными расширениями, так и файлы с расширениями ".html", ".docx", ".jpeg" и т. п., так как их короткие имена будут оканчиватся также объявленными в маске расширениями. |
|
Отправлено: 07:45, 05-01-2015 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Georgio:
Цитата Georgio:
![]() Цитата Georgio:
![]() |
|||
Последний раз редактировалось Iska, 05-01-2015 в 08:17. Отправлено: 08:11, 05-01-2015 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удалить папки по маске | run0ut | Скриптовые языки администрирования Windows | 9 | 21-03-2017 01:27 | |
CMD/BAT - удалить файлы по маске из каталога | Gablik | Скриптовые языки администрирования Windows | 15 | 04-09-2012 16:23 | |
.NET - Скачать файлы с ftp по маске. | Sadhacker | Программирование и базы данных | 1 | 20-07-2012 21:23 | |
Как удалить разделы в реестре по маске? | TempUser | AutoIt | 0 | 14-05-2011 15:49 | |
Удалить файлы в папке по маске | Nealles | Программирование и базы данных | 4 | 10-09-2003 23:11 |
|