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

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

Ответить
Настройки темы
CMD/BAT - [решено] CMD Разрезание строки на подстроки

Аватара для Acuna

Новый участник


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

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


Всем привет!

Есть строка вида

Код: Выделить весь код
key1=value2;key2=value2;key3=value3
Появилась необходимость разрезать ее и сделать из нее переменные со значениями.

Таких пар "ключ-значение" может быть большое количество.

А получиться из этого должно что-то типа

Код: Выделить весь код
%key1% = value1
%key2% = value2
%key3% = value3
и т. д. То есть одноименные переменные с присвоенными им значениями.

Обгуглился до кучи! Много вариантов когда делить нужно только по одному символу, а тут у меня его нужно осуществлять в несколько этапов по-ходу...

А вообще я батникам удивляюсь, для каждого чиха язык заново почти что создавать надо! (((

Заранее благодарен!

Отправлено: 19:18, 17-03-2014

 

Ветеран


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

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


Iska, conemu

Отправлено: 19:07, 19-03-2014 | #11



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

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


Ветеран


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

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


Foreigner, спасибо, ясно. Тоже гоже.

Отправлено: 19:26, 19-03-2014 | #12


Аватара для yurfed

Ветеран


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

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


Acuna, вам скрипт нужен принципиально или можно обойтись стандартными средствами?
Любой текстовый редактор, понимающий регулярные выражения в поиске/замене. Тот же всем известный Notepad++
Замена в два прохода. Первый - замена ; на перевод строки \n
Второй - замена key на %key%.
Делов на 5 секунд.

Отправлено: 21:21, 19-03-2014 | #13


Аватара для Acuna

Новый участник


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

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


yurfed, к сожалению, да. Предполагается, что эти аргументы юзеры будут вводить самостоятельно при использовании этого батника. То, что они работают с батниками, еще не свидетельствует об их обширных понятиях в этой области) Так что да, все должно быть "само") Ну либо если все-таки батники будут вредничать и дальше и расколоться не захотят - воспользуюсь неплохим решением Georgio. Просто мне все-таки хотелось одним аргументом все присунуть...

Foreigner, ну хорошо, вот ты получил эти три строки. А можно их как-то по знаку = теперь разделить на ключ и значение? Возможно, это то, что нужно)

Отправлено: 03:15, 21-03-2014 | #14


Ветеран


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

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


Acuna, можно:
Код: Выделить весь код
:: mybatch %var% "key1=1;key2=2;key3=3"

@echo off
setlocal

echo %1
set str="%~2"

for %%i in (%str:;=","%) do 1>nul set %%i

for /f "tokens=1,2 delims==" %%i in ('set key') do echo %%i %%j
Вывод:
Код: Выделить весь код
test
key1 1
key2 2
key3 3

Последний раз редактировалось Foreigner, 21-03-2014 в 08:00.


Отправлено: 07:49, 21-03-2014 | #15


Аватара для Acuna

Новый участник


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

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


Эцнова я) Foreigner, странно, но в mybatch пишет то же самое:

Цитата:
Переменная среды key не определена
Режим вывода команд на экран (echo) отключен
Нет, ну надо же какие душлые!

Отправлено: 20:04, 24-03-2014 | #16


Ветеран


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

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


Acuna, Я даже не знаю, что посоветовать, скопировал свой последний вариант, все работает. Вы не забыли строку key1.... взять в кавычки?
Код: Выделить весь код
mybatch %var% "key1=1;key2=2;key3=3"
Т.к. символ ";" является разделителем. Во всяком случае в 8.1

Вы лучше напишите, что нужно конкретно, так будет проще.

Последний раз редактировалось Foreigner, 24-03-2014 в 21:14.


Отправлено: 21:02, 24-03-2014 | #17


Аватара для Acuna

Новый участник


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

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


Foreigner, о Боже! Все-таки работает! Глаз замылился, забыл назначить переменную var. Хотя почему он при этом называл ее key для меня загадка, ну да ладно, батники живут своей жизнью... Да уж, решение конечно интересное...

Хотел спросить, а что за запятая в первой строке тут: %str:;=","% Это какой-то спец. символ, или что? И do 1>nul set %%i что-то подавляет? А что?

А так, огромное спасибо! Пожалуй, ларчик с размаху и фомкой, как это часто бывает с батниками, но все-таки открылся)))

Я для себя его немного доработал (мне же с этими переменными еще работать надоть) ). Так что кому интересно:

Цитата:

файл test.bat:

@echo off

set var1=value1

test2 %var1% "key1=1;key2=2;key3=3"

файл test2:

set str="%~2"
for %%i in (%str:;=","%) do 1>nul set %%i
for /f "tokens=1,2 delims==" %%i in ('set key') do set %%i=%%j

echo %~1
echo %key1%
echo %key2%
echo %key3%

Отправлено: 16:46, 25-03-2014 | #18


Ветеран


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

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


Цитата Acuna:
а что за запятая в первой строке тут: %str:;=","% Это какой-то спец. символ, или что? »
Замена всех вхождений символа «;» в переменной окружения «str» на последовательность «","». Таким образом «"key1=1;key2=2;key3=3"» превращается в «"key1=1","key2=2","key3=3"».

Цитата Acuna:
И do 1>nul set %%i что-то подавляет? А что? »
Перенаправление stdout на пустое устройство («1>nul») подавляет вывод команды «set %%i».
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 25-03-2014 | #19


Аватара для Acuna

Новый участник


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

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


Iska, ясно, спасибо! Но ведь set только вводит новую переменную. А зачем ее нужно вводить и тут же подавлять? Или я что-то недопонимаю?)

Отправлено: 03:15, 26-03-2014 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту) pogo Скриптовые языки администрирования Windows 12 06-12-2013 17:59
CMD/BAT - CMD/BAT разбор строки с символом перехода строки в конце. Alex1254 Скриптовые языки администрирования Windows 0 19-09-2013 19:24
CMD/BAT - [решено] Преобразование строки в простое число CMD/BAT kelevara Скриптовые языки администрирования Windows 7 26-04-2013 16:55
Virustotal и разрезание больших файлов Atle Защита компьютерных систем 1 08-10-2011 14:15
Разное - [решено] Подскажите с цветом командной строки CMD Keeper2006 Оформление Windows XP 1 06-10-2008 14:56




 
Переход