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

Компьютерный форум 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

 

Ветеран


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

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


Цитата Acuna:
А вообще я батникам удивляюсь, для каждого чиха язык заново почти что создавать надо! ((( »
Это уж точно. "Бои без правил". Но в этом их прелесть.



Вы это хотели получить в результате:

Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set n=
for %%i in (key1=value1;key2=value2;key3=value3) do (
  set /a n+=1
  if !n!==1 (
   set key=%%i
) else (
   set !key!=%%i
   set n=
  )
)
set key=
set key
pause>nul
endlocal
exit /b
???
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:00, 17-03-2014 | #2



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

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


Старожил


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

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


Применил небольшую хитрость:
Код: Выделить весь код
@echo off
set "str=key1=value2;key2=value2;key3=value3"
set %str:;=&set %
set k
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:12, 17-03-2014 | #3


Аватара для Acuna

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


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

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


Цитата:
Это уж точно. "Бои без правил". Но в этом их прелесть.
Вот-вот, я бы даже сказал "на любителя"!)
Лично я предпочитаю, чтобы язык все-таки подчинялся каким-либо законам)

Спасибо, оба приема действительно режут. Но я, возможно, не совсем точно описал задачу. В итоге мне нужно выводить эти переменные в echo.

То есть echo %key1% выведет value1, echo %key2% выведет value2 и т. д. А изначально строка должна быть именно строкой (она будет вводиться как аргумент функции). Вообще, суть в том, что в батник нужно вбросить около 50 значений (то есть больше 9 возможных). Вот я и хотел их ввести всего одним аргументом...

Отправлено: 20:30, 17-03-2014 | #4


Ветеран


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

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


Цитата Acuna:
около 50 значений (то есть больше 9 возможных) »

Возможно и более 50 значений. Например, вот так:

Код: Выделить весь код
@echo off
call:# "key1=value1" "key2=value2" "key3=value3" "key4=value4" "key5=value5"^
 "key6=value6" "key7=value7" "key8=value8" "key9=value9" "key10=value10"^
 "key11=value11" "key12=value12" "key13=value13" "key14=value14" "key15=value15"

echo %key1%
echo %key2%
echo %key3%
echo %key4%
echo %key5%
echo %key6%
echo %key7%
echo %key8%
echo %key9%
echo %key10%
echo %key11%
echo %key12%
echo %key13%
echo %key14%
echo %key15%

echo.

rem Или проще:
for /l %%i in (1 1 15) do call echo %%key%%i%%

pause>nul
exit /b

:#
for %%i in (%*) do set %%i
exit /b

Отправлено: 23:32, 17-03-2014 | #5


Аватара для Acuna

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


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

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


Ах да, действительно, решение

Код: Выделить весь код
for %%i in (%*) do set %%i
оказалось наредкость изящным, а главное действенным. И без присущей батникам лишней писанины.

Код: Выделить весь код
rem Или проще:
for /l %%i in (1 1 15) do call echo %%key%%i%%
Это понятно, просто количество аргументов изначально не известно. В том-то и прелесть этой задачи: юзер может ввести различное количество аргументов. Получается что-то сродни массиву.

А что, если эту задачу немного усложнить, скажем еще одним аргументом ввести просто переменную:

Код: Выделить весь код
set var=ggg
moysuperbatnik.bat %var% "key1=value1" "key2=value2"
Что самое интересное, echo %1 в moysuperbatnik.bat при этом работает, но выводит сообщение "Переменная var не определена". Хотя ggg выводит. Это сообщение можно просто подавить, но боюсь того, как он может себя при этом повести на разных машинах...

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


Ветеран


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

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


Цитата Acuna:
Что самое интересное, echo %1 в moysuperbatnik.bat при этом работает, но выводит сообщение "Переменная var не определена" »
У меня все в порядке:
Код: Выделить весь код
:: Вызывать -- mybatch.cmd %var% "key1=1;key2=2;key3=3"

@echo off
setlocal

echo %1
set str="%~2"

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

set key

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


Аватара для Acuna

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


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

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


Foreigner, ой, да этот mybatch.cmd выкинул мне все мои установленные переменные и плюс надпись "Переменная среды key не определена". Это он ругается на строку set key(

Мне бы только второй аргумент распарсить в mybat.bat:

Код: Выделить весь код
mybatch.cmd %var% "key1=value1;key2=value2;key3=value3"
А все остальные передавать в него as is...

Ну все равно, ларчик хоть и фомкой, но все-равно уже потихоньку поддается)

Последний раз редактировалось Acuna, 19-03-2014 в 17:21.


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


Ветеран


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

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


Изображения
Тип файла: png 1.png
(9.1 Kb, 18 просмотров)

Цитата Acuna:
выкинул мне все мои установленные переменные и плюс надпись "Переменная среды key не определена" »

Отправлено: 18:32, 19-03-2014 | #9


Ветеран


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

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


Цитата Foreigner:
Изображения
Тип файла: png 1.png »
Foreigner, «Console2»?

Отправлено: 18:42, 19-03-2014 | #10



Компьютерный форум 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




 
Переход