|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выделить часть строки и отправить в переменную |
|
|
CMD/BAT - [решено] Выделить часть строки и отправить в переменную
|
Пользователь Сообщения: 87 |
Здравствуйте, подскажите какие способы есть отправить в переменную часть строки?
Например строка я хочу получить в переменной var слово password. флагом будет слово error меду которыми находиться нужная информация. Какие варианты есть? FOR такой делимитер можно подсунуть? Или findstr регуляркой какой нибудь можно вытащить? Делимитер очень желательно слово или ряд символов. Например ### |
|
Отправлено: 17:36, 05-02-2018 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать допустим так, хоть и не коротко:
@echo off set "s=fast slow error password error garbage test text blabla" set "teg=error" set "f_in=file.txt" >"%f_in%" (for %%a in (%s%) do @echo %%a) setlocal enabledelayedexpansion <"%f_in%" (for /f "delims=[]" %%a in ('find /n "%teg%"') do @set/a n+=1& set s!n!=%%a& set/a nd=s1+1,kd=s2-1) <"%f_in%" (for /f "delims=" %%a in ('for /l %%a in ^(%nd%,1,%kd%^) do @find /n /v ""^|find "[%%a]"') do @set "s=%%a"& set "var=!s:*]=!") setlocal disabledelayedexpansion echo %var% pause exit кстати подобное PoSh сделает на ура и моргнуть не успеете. |
Последний раз редактировалось alpap, 06-02-2018 в 12:37. Отправлено: 12:13, 06-02-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Спасибо, пока правда ничего не понятно. Но я назову все переменные "говорящими" для меня названиями и за пару дней осилю.
Насчёт PoSh давно уже думаю но нет у меня пока условий дотошно учиться. Увы. |
Отправлено: 13:37, 06-02-2018 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Patroklos:
- вашу строку бьем по пробелу и в файл - даем номера строкам - выбираем номера строк с нужным тегом - забираем строку с номером между найденных номеров выше и помещаем в переменную ничего сложного, но букафф много ![]() |
|
Отправлено: 16:07, 06-02-2018 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать конкретно для вашего случая (в смысле поиск слова в предложении между двумя одинаковыми тегами) и без временного файла
(можно и еще короче, но пойдет и так, так понятнее, хотя смотря для кого) @echo off set "s=fast slow error password error garbage test text blabla" set "teg=error" setlocal enabledelayedexpansion for %%a in (%s%) do set /a n+=1& set $_!n!=%%a for /f "tokens=2 delims=_=" %%a in ('set $_^|find "%teg%"') do set /a sn=%%a-1 for /f "tokens=2 delims==" %%a in ('set $_%sn%') do set "var=%%a" echo %var% endlocal pause |
|
Отправлено: 16:42, 06-02-2018 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата alpap:
В пароле не должно быть пробелов @Echo Off cls Set "Str=fast slow errOr password Error garbage test text blabla" Set "Teg=error" Call :Password "%Str%" "Pass" Echo "%Pass%" pause GoTo :Eof :Password Set /A nTeg=0 :Begin Set /A nTeg+=1 FOR /F "tokens=%nTeg% delims= " %%i IN ("%Str%") DO If /I %Teg%==%%i GoTo :Cont GoTo :Begin :Cont Set /A nTeg+=1 FOR /F "tokens=%nTeg% delims= " %%i IN ("%Str%") DO Set "%~2=%%i" GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 06-02-2018 в 17:30. Отправлено: 17:20, 06-02-2018 | #6 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать вот короче
вторичным тегом выступает = , можно назначить свой, если такой символ будет неуместен по тексту (в смысле присутствует уже) |
Отправлено: 17:28, 06-02-2018 | #7 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Круть! Спасибо. Чувствую я так и профессором "батаники" стану.
Я плашку решено пока не буду ставить так как мне возможно понадобятся подсказки. Поставлю чуть позже. Спасибо. |
Отправлено: 09:45, 07-02-2018 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать alpap, Краткость, несомненно, сестра таланта
![]() Предлагаю длиннее, но с учетом этих имхо возможных случаев. Как и у Вас, батник работает в предположении, что между error и password не более одного пробела
@Echo Off cls Set "Str=fast slow error password error garbage test text blabla" Call :Password "%Str%" "error" "Pass" Echo "%Pass%" Pause GoTo :Eof :Password SetLocal Set "Dlm=ё" Set "Str=a %~1 a" &Set "Teg= %~2 " Call Set "Str=%%Str:%Teg%=%Dlm%%%" EndLocal &FOR /F "tokens=2,3 delims=%Dlm%" %%i IN ("%Str%") DO If Not "%%j"=="" (Set "%~3=%%i") Else (Set "%~3=") GoTo :Eof В качестве вспомогательного разделителя я здесь указал ё, естественно, можно указать любой допустимый. Set "Dlm=ё" Однако, реально я тестировал батник с символом, который на клавиатуре пользователь, не обременённый излишними знаниями, не введёт. Например, символ ASCII с десятичным кодом 177. Я не смог разместить на форуме батник с этим символом (ломается весь текст сообщения), поэтому вынужденно указал ё. Опять же, имхо выделение пароля - не основная цель в неизвестном нам батнике, поэтому я это оформил в виде процедуры, чтобы не загромождать основной текст кода Простите, если излагаю известное
Чтобы вставить в текст символ ASCII с определённым десятичным кодом, надо на цифровой клавиатуре, удерживая клавишу Alt, набрать нужный код
|
------- Последний раз редактировалось megaloman, 08-02-2018 в 22:52. Отправлено: 11:54, 07-02-2018 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 17:42, 07-02-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|