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

Ответить
 • Просмотры: 1
Аватара пользователя
alpap

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

Сообщение alpap »

Здравствуйте ещё раз. Я посидел над вашими решениями, понял принципы и способы реализации и наконец то сдвинулся с места.

Спасибо вам большое. Теперь у меня очередная "глупая" проблема: я ищу строки в текстовом файле и в них ищу пароль.

Проблема что в файле может быть несколько паролей из которых мне нужен только первый. А он перезаписывается.

Существует ли какой либо способ выйти из FOR после того как результат получен? Как нибудь так?



Код:

Код: Выделить всё

for /f "tokens=2 delims=###" %%c in ("data.txt") do (
	set var=%%c
	if defined var ( Пока пока скрипт! )

проблема что у меня for-ы вложены и в результате ерунда.

Как прекратить FOR когда var дефайнет?
Аватара пользователя
megaloman

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

Сообщение megaloman »

я ищу строки в текстовом файле и в них ищу пароль между двумя определёнными одинаковыми словами.

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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=▒"

естественно, можно указать любой допустимый, но гарантированно отсутствующий в тексте
Аватара пользователя
Patroklos

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

Сообщение Patroklos »

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

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

Сообщение Patroklos »

Цитата Patroklos:



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




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

Кстати, в посте #9 я накосячил: строка вида

fast slow error password garbage test text blabla

обрабатывалась неверно. Исправил.
Аватара пользователя
Patroklos

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

Сообщение Patroklos »

Спасибо большое. С ваше помощью я понял как надо всё делать и всё таки собрал своего Франкинштейна.

Теперь у меня проблемы с кодировками. Я работаю с информацией скачиваемой и загружаемой с/на сайт

и пока всё на английском всё отлично а с русским местами проблемы. Боюсь опять придётся просить помощи.

Насчёт разделителя вы правы одного уникального символа достаточно. И работать с ним гораздо легче.

Ещё раз спасибо.
Аватара пользователя
megaloman

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

Сообщение megaloman »

Patroklos,


Если текст в 1251 кодировке и батник сохранить в 1251 кодировке, вроде бы так работает

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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)

Надо только вспомогательный символ-разделитель подрбрать.
Аватара пользователя
Patroklos

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

Сообщение Patroklos »

Проблема не в той части где ваш код. Там всё отлично.

Я беру полученную переменную, подставляю её в json строку и при помощи curl передаю её на сервер.

и тут возникает проблема. Пока всё на английском всё супер. С русским проблемы.

Если я определяю переменную в ручную в файле



Код:

Код: Выделить всё

set var=русский текст

и кодировка 1251 то всё работает. Если любой другой способ ( например set /p var=
Аватара пользователя
alpap

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

Сообщение alpap »

Patroklos

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

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

Сообщение Patroklos »

Цитата alpap:



Сохраняйте все (совсем все и текстовые и bat) в кодировке 866, проблем поубавится
CMD/BAT - [решено] Выделить часть строки и отправить в переменную




Дело в том что 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

тут просто негде напортачить.

Всем спасибо большое за помощь. Я многому научился на ваших примерах.

Ставлю теме решено так как извлекать инфу по делиму я с вашей помощью научился.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»