Findstr и кириллица
Вложений: 1
Судя по поиску не я первый с этим мучаюсь, но решение которое бы у меня сработало я не нашел.
Во вложении 2 файла Внутри файлов меня интересуют два признака, в одном это слово ОВМ-Ф, в другом ОВК-Ф Мне нужно написать батник который искал бы эти слова в файлах *.din и если нашел ОВМ-Ф, то идет на метку 1, если нашел ОВК-Ф, то на метку 2, если не нашел оба то на метку 3 Что то типа такого: Код:
set "s=ОВМ-Ф" Пробовал указывать кодировку в начале батника chcp 1251 - не помогло Батник в кодировке 1251 как и файлы din |
сохранить батник в 866 кодировке (например через NPP) и должно поехать.
|
Elven, попробовал все равно выдает Строка "ОВМ-Ф" - не обнаружена
Весь батник: Код:
@echo off |
surgutfred, вместо findstr можно использовать find.
|
Цитата:
Код:
findstr /rc:"\<%s%\>" "*.din" |
surgutfred,
Код:
@Echo Off |
megaloman, огромное спасибо, вроде то что нужно, но сегодня башка уже не варит, завтра посмотрю внимательнее
|
megaloman, еще уточняющий вопрос.
если файлов *.din несколько (но они всегда одного типа, смешанных не может быть) как ограничить проверку по одному любому файлу? Иначе он после перехода по метке повторяет одни и те же действия для каждого файла *.din А то как то не хочется перечислять пару десятков вариантов :( |
Может быть несколько din, но при каждом запуске все din одного типа либо все ОВК-Ф либо все ОВМ-Ф либо третий вариант
В итоге например три ОВК-Ф bat переходит по метке ОВК-Ф и выполняет все действия для каждого файла. В следующий запуск будут например четыре ОВМ-Ф и такая же картина. Мне в принципе достаточно по одному файлу узнать какого типа данный набор ОВК-Ф, ОВМ-Ф или третий вариант Мне не нужно что бы цикл обрабатывал каждый файл. Извиняюсь если сразу непонятно объяснил, просто не подумал что он по кругу будет гонять Пока что я указал 9 признаков, по которым можно вычленить один из файлов по маске, но это в целом 43 лишних строки кода Если есть вариант что из имеющихся *.din взять любой один и из него вытащить признак было бы круто. |
|
Iska, да это недопустимо
|
surgutfred, Вот костыль имеющегося решения: вместо старого For написать
Код:
FOR %%f IN ("%BoxIn%\%Mask%") DO Call :Finder "%%f" %Fstr% &GoTo :Cont Цитата:
Set "Fstr="ОВК-Ф" "ОВМ-Ф" "Тра ля ля" "Ку-ку" "и т д"" только затем напишите сколько нужно процедур, сейчас это :Fstr1, :Fstr2. Если девять признаков, то :Fstr3 ....:Fstr9. Если ни один не найден, :FstrNo Номер процедурочки соответствует позиции признака в перечислении. |
surgutfred, Немного изменил постановку
Скрипт выберет все файлы с признаком: "ОВК-Ф" и сделает для них процедуру :Fstr1 "ОВМ-Ф" и сделает для них процедуру :Fstr2 Если таких признаков куча, соответственно будут делаться :Fstr(с другими номерами) Если в файлах ни одного признака не найдено, сделается процедура :FstrNo То есть можно иметь и смесь файлов с разными признаками, и корректно их обработать Вот код
Код:
@Echo Off |
Что то вчера вроде писал сообщение, похоже не отправил...
megaloman, спасибо за этот вариант, вполне возможно будет востребован в будущем. Про 9 признаков я имел ввиду другое, типа временного костыля. Данный обработчик в зависимости сначала от вида файла по Вашему скрипту, а потом еще и по моей добавке по названию файла копирует определенный набор папок (в зависимости от набора din 10гб - 100гб) Поэтому мне и неинтересно что он обрабатывает по кругу каждый файл и копирует одно и тоже несколько раз. Мне нужно что бы он посмотрел вид файла в первом файле из набора и просто пошел по метке не трогая остальные файлы. Вариаций файлов din по названию файла около 100 примерно, в каждом наборе дин есть одна, скажем так основная, их штук 35. Я сумел сузить до 9 масок, чтобы вычленить из набора эту основную систему и смотреть признак в ней (ОВК-Ф или ОВМ-Ф). Но это примерно 40 строчек кода с выборкой основной системы. Поэтому и спрашивал может есть вариант короче обработать только один любой файл из набора |
|
megaloman, Iska, Спасибо за помощь, пока вроде получил то что нужно. Время покажет все ли я предусмотрел в алгоритме.
|
Время: 20:06. |
Время: 20:06.
© OSzone.net 2001-