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

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

Ответить
Настройки темы
CMD/BAT - [решено] Выделить часть строки и отправить в переменную

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


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

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


Изменения
Автор: Patroklos
Дата: 05-02-2018
Описание: поправки
Здравствуйте, подскажите какие способы есть отправить в переменную часть строки?
Например строка
Код: Выделить весь код
fast slow error password error garbage test text blabla
я хочу получить в переменной var слово password.
флагом будет слово error меду которыми находиться нужная информация.
Какие варианты есть? FOR такой делимитер можно подсунуть?
Или findstr регуляркой какой нибудь можно вытащить?
Делимитер очень желательно слово или ряд символов. Например ###

Отправлено: 17:36, 05-02-2018

 

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


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

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


Здравствуйте ещё раз. Я посидел над вашими решениями, понял принципы и способы реализации и наконец то сдвинулся с места.
Спасибо вам большое. Теперь у меня очередная "глупая" проблема: я ищу строки в текстовом файле и в них ищу пароль.
Проблема что в файле может быть несколько паролей из которых мне нужен только первый. А он перезаписывается.
Существует ли какой либо способ выйти из FOR после того как результат получен? Как нибудь так?
Код: Выделить весь код
for /f "tokens=2 delims=###" %%c in ("data.txt") do (
	set var=%%c
	if defined var ( Пока пока скрипт! )
проблема что у меня for-ы вложены и в результате ерунда.
Как прекратить FOR когда var дефайнет?

Отправлено: 18:39, 08-02-2018 | #11



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

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


Ветеран


Contributor


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

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


я ищу строки в текстовом файле и в них ищу пароль между двумя определёнными одинаковыми словами.
Код: Выделить весь код
@Echo Off
cls
Set "FileIn=Z:\Box_In\У попа была собака.txt"

Call :Password "%FileIn%" "error" "Pass"
Echo "%Pass%"

Pause
GoTo :Eof

:Password
	FOR /F "usebackq delims=" %%s IN (%1) DO Call :PassIn "%%s" %2 %3 &&GoTo :Eof
GoTo :Eof
:PassIn
	SetLocal
	Set "Dlm=▒"
	Set "Str=a %~1 a" &Set "Teg= %~2 "
	Call Set "Str=%%Str:%Teg%=%Dlm%%%"
	FOR /F "tokens=2,3 delims=%Dlm%" %%i IN ("%Str%") DO If Not "%%j"=="" (EndLocal &Set "%~3=%%i" &Exit /B 0)
EndLocal &(Set "%~3=" &Exit /B 1)
В качестве вспомогательного разделителя я здесь указал символ ▒
то есть символ ASCII с десятичным кодом 177.
Set "Dlm=▒"
естественно, можно указать любой допустимый, но гарантированно отсутствующий в тексте

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


Последний раз редактировалось megaloman, 08-02-2018 в 22:20.

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

Отправлено: 22:01, 08-02-2018 | #12


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


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

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


И снова спасибо! Выручаете. Сейчас буду разбираться что да как.

Отправлено: 22:27, 08-02-2018 | #13


Ветеран


Contributor


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

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


Цитата Patroklos:
delims=###»
ИМХО, разделитель - это один символ. И повторять его три раза не имеет смысла. Можно указать набор символов, например, три разных символа, если нужно.

Кстати, в посте #9 я накосячил: строка вида
fast slow error password garbage test text blabla
обрабатывалась неверно. Исправил.

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


Последний раз редактировалось megaloman, 08-02-2018 в 22:49.

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

Отправлено: 22:27, 08-02-2018 | #14


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


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

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


Спасибо большое. С ваше помощью я понял как надо всё делать и всё таки собрал своего Франкинштейна.
Теперь у меня проблемы с кодировками. Я работаю с информацией скачиваемой и загружаемой с/на сайт
и пока всё на английском всё отлично а с русским местами проблемы. Боюсь опять придётся просить помощи.
Насчёт разделителя вы правы одного уникального символа достаточно. И работать с ним гораздо легче.
Ещё раз спасибо.

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


Ветеран


Contributor


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

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


Patroklos,
Если текст в 1251 кодировке и батник сохранить в 1251 кодировке, вроде бы так работает
Код: Выделить весь код
@Echo Off
cls
chcp 1251 >nul
Set "FileIn=Z:\Box_In\У попа была собака.txt"

Call :Password "%FileIn%" "ошибка" "Pass"

Echo "%Pass%"
Pause
GoTo :Eof

:Password
	FOR /F "usebackq delims=" %%s IN (%1) DO Call :PassIn "%%s" %2 %3 &&GoTo :Eof
GoTo :Eof

:PassIn
	SetLocal
	Set "Dlm=¤"
	Set "Str=a %~1 a" &Set "Teg= %~2 "
	Call Set "Str=%%Str:%Teg%=%Dlm%%%"
	FOR /F "tokens=2,3 delims=%Dlm%" %%i IN ("%Str%") DO If Not "%%j"=="" (EndLocal &Set "%~3=%%i" &Exit /B 0)
EndLocal &(Set "%~3=" &Exit /B 1)
Надо только вспомогательный символ-разделитель подрбрать.

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


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

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

Отправлено: 22:43, 09-02-2018 | #16


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


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

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


Проблема не в той части где ваш код. Там всё отлично.
Я беру полученную переменную, подставляю её в json строку и при помощи curl передаю её на сервер.
и тут возникает проблема. Пока всё на английском всё супер. С русским проблемы.
Если я определяю переменную в ручную в файле
Код: Выделить весь код
set var=русский текст
и кодировка 1251 то всё работает. Если любой другой способ ( например set /p var=<data.log )
та работать отказывается. Сервер ругается на какой то нуль байт в кодировке.
Я уже в ручную все возможные кодировки перебрал. И chcp и кодировки файла и в curl настройки.
И увы пока глухо. Назавтра свежим взглядом взгляну может придумаю чего.

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


Ветеран


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

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


Patroklos
не надо перебирать кодировки, вы хозяин положения и доступ есть ко всем файлам. Сохраняйте все (совсем все и текстовые и bat) в кодировке 866, проблем поубавится, особенно если замените топорный виндовый блокнот на что-то стОящее.

Отправлено: 01:50, 10-02-2018 | #18


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


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

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


Цитата alpap:
Сохраняйте все (совсем все и текстовые и bat) в кодировке 866, проблем поубавится »
Дело в том что json в принципе работает в utf-8 и с любой другой кодировкой не дружит.
Цитата megaloman:
а потрогать файл можно, на который сервер ругается?
Можно сделать задачу в vbs? Или часть задачи в vbs/js ?
»
Я пока активно гуглю пытаясь найти решение но похоже мало кто использует вин смд для работы с json.
Сам файл прост как гвоздь проблема именно с кодировками.
Код: Выделить весь код
chcp 1251
..\bin\curl.exe --request PATCH ^
	https://site.ru/api/path/pid/ ^
	--header "Content-Type: application/json; charset=UTF-8" ^
	--header "Accept: application/json" ^
	-d "{\"data\": {\"pass\": \"%var%\"}}" >.\json\Editet.json
тут просто негде напортачить.
Всем спасибо большое за помощь. Я многому научился на ваших примерах.
Ставлю теме решено так как извлекать инфу по делиму я с вашей помощью научился.

Отправлено: 17:58, 10-02-2018 | #19



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - [решено] Выделить часть текста цветом в ячейке по шаблону на всем листе blackeangel Microsoft Office (Word, Excel, Outlook и т.д.) 14 24-05-2016 01:10
PowerShell - [решено] Выделить из строки текста слово определенной длины и записать в переменную Grafitchic Скриптовые языки администрирования Windows 14 16-07-2014 12:23
CMD/BAT - Последнее слово из строки в файле в переменную NoIZz Скриптовые языки администрирования Windows 2 23-10-2013 14:11
Офис и Текст - [решено] Как выделить строки с определенны символами KooDI Программное обеспечение Windows 2 03-03-2013 14:27
CMD/BAT - [решено] Чтение строки из файла в переменную Николя Скриптовые языки администрирования Windows 42 17-01-2010 19:42




 
Переход