|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выделить часть строки и отправить в переменную |
|
CMD/BAT - [решено] Выделить часть строки и отправить в переменную
|
Пользователь Сообщения: 87 |
Здравствуйте, подскажите какие способы есть отправить в переменную часть строки?
Например строка я хочу получить в переменной var слово password. флагом будет слово error меду которыми находиться нужная информация. Какие варианты есть? FOR такой делимитер можно подсунуть? Или findstr регуляркой какой нибудь можно вытащить? Делимитер очень желательно слово или ряд символов. Например ### |
|
Отправлено: 17:36, 05-02-2018 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Здравствуйте ещё раз. Я посидел над вашими решениями, понял принципы и способы реализации и наконец то сдвинулся с места.
Спасибо вам большое. Теперь у меня очередная "глупая" проблема: я ищу строки в текстовом файле и в них ищу пароль. Проблема что в файле может быть несколько паролей из которых мне нужен только первый. А он перезаписывается. Существует ли какой либо способ выйти из FOR после того как результат получен? Как нибудь так? for /f "tokens=2 delims=###" %%c in ("data.txt") do ( set var=%%c if defined var ( Пока пока скрипт! ) Как прекратить FOR когда var дефайнет? |
Отправлено: 18:39, 08-02-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать И снова спасибо! Выручаете. Сейчас буду разбираться что да как.
|
Отправлено: 22:27, 08-02-2018 | #13 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Patroklos:
Кстати, в посте #9 я накосячил: строка вида fast slow error password garbage test text blabla обрабатывалась неверно. Исправил. |
|
------- Последний раз редактировалось megaloman, 08-02-2018 в 22:49. Отправлено: 22:27, 08-02-2018 | #14 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Спасибо большое. С ваше помощью я понял как надо всё делать и всё таки собрал своего Франкинштейна.
Теперь у меня проблемы с кодировками. Я работаю с информацией скачиваемой и загружаемой с/на сайт и пока всё на английском всё отлично а с русским местами проблемы. Боюсь опять придётся просить помощи. Насчёт разделителя вы правы одного уникального символа достаточно. И работать с ним гораздо легче. Ещё раз спасибо. |
Отправлено: 22:18, 09-02-2018 | #15 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Проблема не в той части где ваш код. Там всё отлично.
Я беру полученную переменную, подставляю её в json строку и при помощи curl передаю её на сервер. и тут возникает проблема. Пока всё на английском всё супер. С русским проблемы. Если я определяю переменную в ручную в файле и кодировка 1251 то всё работает. Если любой другой способ ( например set /p var=<data.log ) та работать отказывается. Сервер ругается на какой то нуль байт в кодировке. Я уже в ручную все возможные кодировки перебрал. И chcp и кодировки файла и в curl настройки. И увы пока глухо. Назавтра свежим взглядом взгляну может придумаю чего. |
Отправлено: 23:49, 09-02-2018 | #17 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Patroklos
не надо перебирать кодировки, вы хозяин положения и доступ есть ко всем файлам. Сохраняйте все (совсем все и текстовые и bat) в кодировке 866, проблем поубавится, особенно если замените топорный виндовый блокнот на что-то стОящее. |
Отправлено: 01:50, 10-02-2018 | #18 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата megaloman:
Сам файл прост как гвоздь проблема именно с кодировками. 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|