Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Findstr и кириллица

Ответить
Настройки темы
CMD/BAT - [решено] Findstr и кириллица

Пользователь


Сообщения: 70
Благодарности: 1

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip File.zip
(1.5 Kb, 6 просмотров)
Судя по поиску не я первый с этим мучаюсь, но решение которое бы у меня сработало я не нашел.
Во вложении 2 файла
Внутри файлов меня интересуют два признака, в одном это слово ОВМ-Ф, в другом ОВК-Ф
Мне нужно написать батник который искал бы эти слова в файлах *.din и если нашел ОВМ-Ф, то идет на метку 1, если нашел ОВК-Ф, то на метку 2, если не нашел оба то на метку 3
Что то типа такого:

Код: Выделить весь код
set "s=ОВМ-Ф"
type "*.din"|>nul findstr /c:"\<%s%\>" && call :p1 || call :p2
Если заменить искомую фразу на английский вариант, то все норм, а русский не ищет. Исходные файлы *.din менять нельзя

Пробовал указывать кодировку в начале батника chcp 1251 - не помогло
Батник в кодировке 1251 как и файлы din

Отправлено: 18:50, 17-09-2018

 

Пользователь


Сообщения: 70
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, да это недопустимо

Отправлено: 14:00, 18-09-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


surgutfred, Вот костыль имеющегося решения: вместо старого For написать
Код: Выделить весь код
	FOR %%f IN ("%BoxIn%\%Mask%") DO Call :Finder "%%f" %Fstr% &GoTo :Cont
	:Cont
Цитата surgutfred:
Пока что я указал 9 признаков »
Не понял, что такое признаки. Если это "ОВК-Ф" "ОВМ-Ф" и т д, то скрипт сработает для произвольного числа признаков, только укажите их:
Set "Fstr="ОВК-Ф" "ОВМ-Ф" "Тра ля ля" "Ку-ку" "и т д""
только затем напишите сколько нужно процедур, сейчас это :Fstr1, :Fstr2. Если девять признаков, то :Fstr3 ....:Fstr9. Если ни один не найден, :FstrNo
Номер процедурочки соответствует позиции признака в перечислении.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-09-2018 в 14:49.


Отправлено: 14:44, 18-09-2018 | #12


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


surgutfred, Немного изменил постановку
Скрипт выберет все файлы с признаком:
"ОВК-Ф" и сделает для них процедуру :Fstr1
"ОВМ-Ф" и сделает для них процедуру :Fstr2
Если таких признаков куча, соответственно будут делаться :Fstr(с другими номерами)
Если в файлах ни одного признака не найдено, сделается процедура :FstrNo
То есть можно иметь и смесь файлов с разными признаками, и корректно их обработать
Вот код
Код: Выделить весь код
@Echo Off
cls
	>nul chcp 1251
	Set "BoxIn=Z:\Box_In\File"
	Set "Ext=.din"

	Set "Fstr="ОВК-Ф" "ОВМ-Ф""

	Set /A i=0
	Set /A Log=0
	If Not Exist "%BoxIn%\*%Ext%" Echo "%BoxIn%\*%Ext%" not found &Exit /B 1
	For %%p In (%Fstr%) Do (
		Call Set /A i+=1
		FOR /F "usebackq delims=" %%f IN (`FIND /C /I %%p "%BoxIn%\*%Ext%"`) Do Call :Finder "%%f" "%Ext%" %%p
	)
	If %Log%==0 Call :FstrNo %Fstr%
pause
GoTo :Eof

:Finder
	Set "N=%~1"
	Call Set "N=%%N:*%~2: =%%"
	Set "File=%~1"
	Set "File=%File:*-- =%"
	Call Set "File=%%File:: %N%=%%"

	If Not "%N%"=="0" Set /A Log=1 &Call :Fstr%i% "%File%" %3
GoTo :Eof

:Fstr1
	Echo "ОВК-Ф" %2 %1
GoTo :Eof

:Fstr2
	Echo "ОВМ-Ф" %2 %1
GoTo :Eof

:FstrNo
	Echo no files with %*
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-09-2018 в 17:21.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:02, 18-09-2018 | #13


Пользователь


Сообщения: 70
Благодарности: 1

Профиль | Отправить PM | Цитировать


Что то вчера вроде писал сообщение, похоже не отправил...

megaloman, спасибо за этот вариант, вполне возможно будет востребован в будущем.

Про 9 признаков я имел ввиду другое, типа временного костыля.

Данный обработчик в зависимости сначала от вида файла по Вашему скрипту, а потом еще и по моей добавке по названию файла копирует определенный набор папок (в зависимости от набора din
10гб - 100гб) Поэтому мне и неинтересно что он обрабатывает по кругу каждый файл и копирует одно и тоже несколько раз. Мне нужно что бы он посмотрел вид файла в первом файле из набора и просто пошел по метке не трогая остальные файлы.

Вариаций файлов din по названию файла около 100 примерно, в каждом наборе дин есть одна, скажем так основная, их штук 35. Я сумел сузить до 9 масок, чтобы вычленить из набора эту основную систему и смотреть признак в ней (ОВК-Ф или ОВМ-Ф).
Но это примерно 40 строчек кода с выборкой основной системы.
Поэтому и спрашивал может есть вариант короче обработать только один любой файл из набора

Отправлено: 06:39, 21-09-2018 | #14


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата surgutfred:
Мне нужно что бы он посмотрел вид файла в первом файле из набора и просто пошел по метке не трогая остальные файлы. »
Цитата surgutfred:
может есть вариант короче обработать только один любой файл из набора »
Смотрите сообщение #12.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:45, 21-09-2018 | #15


Пользователь


Сообщения: 70
Благодарности: 1

Профиль | Отправить PM | Цитировать


megaloman, Iska, Спасибо за помощь, пока вроде получил то что нужно. Время покажет все ли я предусмотрел в алгоритме.

Отправлено: 10:47, 21-09-2018 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Findstr и кириллица

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - findstr точный поиск vngreez@vk Скриптовые языки администрирования Windows 34 23-06-2017 22:50
CMD/BAT - certutil и findstr - иероглифы Sarus Скриптовые языки администрирования Windows 0 06-05-2015 09:49
CMD/BAT - [решено] findstr помощь firstarey Скриптовые языки администрирования Windows 26 12-10-2013 12:17
CMD/BAT - [решено] Помогите с findstr dima05605 Скриптовые языки администрирования Windows 9 09-12-2012 19:50
CMD/BAT - [решено] Помогите с findstr dima05605 Скриптовые языки администрирования Windows 15 28-10-2012 19:49




 
Переход