![]() |
CMD Разрезание строки на подстроки
Всем привет!
Есть строка вида Код:
key1=value2;key2=value2;key3=value3 Таких пар "ключ-значение" может быть большое количество. А получиться из этого должно что-то типа Код:
%key1% = value1 Обгуглился до кучи! Много вариантов когда делить нужно только по одному символу, а тут у меня его нужно осуществлять в несколько этапов по-ходу... А вообще я батникам удивляюсь, для каждого чиха язык заново почти что создавать надо! ((( Заранее благодарен! |
Цитата:
Вы это хотели получить в результате: Код:
@echo off |
Применил небольшую хитрость:
Код:
@echo off |
Цитата:
Лично я предпочитаю, чтобы язык все-таки подчинялся каким-либо законам) Спасибо, оба приема действительно режут. Но я, возможно, не совсем точно описал задачу. В итоге мне нужно выводить эти переменные в echo. То есть echo %key1% выведет value1, echo %key2% выведет value2 и т. д. А изначально строка должна быть именно строкой (она будет вводиться как аргумент функции). Вообще, суть в том, что в батник нужно вбросить около 50 значений (то есть больше 9 возможных). Вот я и хотел их ввести всего одним аргументом... |
Цитата:
Возможно и более 50 значений. Например, вот так: Код:
@echo off |
Ах да, действительно, решение
Код:
for %%i in (%*) do set %%i Код:
rem Или проще: А что, если эту задачу немного усложнить, скажем еще одним аргументом ввести просто переменную: Код:
set var=ggg |
Цитата:
Код:
:: Вызывать -- mybatch.cmd %var% "key1=1;key2=2;key3=3" |
Foreigner, ой, да этот mybatch.cmd выкинул мне все мои установленные переменные и плюс надпись "Переменная среды key не определена". Это он ругается на строку set key(
Мне бы только второй аргумент распарсить в mybat.bat: Код:
mybatch.cmd %var% "key1=value1;key2=value2;key3=value3" Ну все равно, ларчик хоть и фомкой, но все-равно уже потихоньку поддается) |
Вложений: 1
Цитата:
|
|
Iska, conemu
|
Foreigner, спасибо, ясно. Тоже гоже.
|
Acuna, вам скрипт нужен принципиально или можно обойтись стандартными средствами?
Любой текстовый редактор, понимающий регулярные выражения в поиске/замене. Тот же всем известный Notepad++ Замена в два прохода. Первый - замена ; на перевод строки \n Второй - замена key на %key%. Делов на 5 секунд. |
yurfed, к сожалению, да. Предполагается, что эти аргументы юзеры будут вводить самостоятельно при использовании этого батника. То, что они работают с батниками, еще не свидетельствует об их обширных понятиях в этой области) Так что да, все должно быть "само") Ну либо если все-таки батники будут вредничать и дальше и расколоться не захотят - воспользуюсь неплохим решением Georgio. Просто мне все-таки хотелось одним аргументом все присунуть...
Foreigner, ну хорошо, вот ты получил эти три строки. А можно их как-то по знаку = теперь разделить на ключ и значение? Возможно, это то, что нужно) |
Acuna, можно:
Код:
:: mybatch %var% "key1=1;key2=2;key3=3" Код:
test |
Эцнова я) Foreigner, странно, но в mybatch пишет то же самое:
Цитата:
|
Acuna, Я даже не знаю, что посоветовать, скопировал свой последний вариант, все работает. Вы не забыли строку key1.... взять в кавычки?
Код:
mybatch %var% "key1=1;key2=2;key3=3" Вы лучше напишите, что нужно конкретно, так будет проще. |
Foreigner, о Боже! Все-таки работает! Глаз замылился, забыл назначить переменную var. Хотя почему он при этом называл ее key для меня загадка, ну да ладно, батники живут своей жизнью... Да уж, решение конечно интересное...
Хотел спросить, а что за запятая в первой строке тут: %str:;=","% Это какой-то спец. символ, или что? И do 1>nul set %%i что-то подавляет? А что? А так, огромное спасибо! Пожалуй, ларчик с размаху и фомкой, как это часто бывает с батниками, но все-таки открылся))) Я для себя его немного доработал (мне же с этими переменными еще работать надоть) ). Так что кому интересно: Цитата:
|
Цитата:
Цитата:
|
Iska, ясно, спасибо! Но ведь set только вводит новую переменную. А зачем ее нужно вводить и тут же подавлять? Или я что-то недопонимаю?)
|
Цитата:
|
Iska, ну да, так, возможно, будет точнее. Но вот я и спрашиваю, если она просто создает переменную окружения и присваивает ей значение, то зачем подавлять ее вывод, которого нет?
|
Acuna, я тоже не знаю. Подождём, что скажет на этот счёт коллега Foreigner.
|
Цитата:
|
Foreigner, на примере кода из #15 — не вижу, не пойму. Покажите, что у Вас — c «1>nul» и без «1>nul».
|
Время: 13:45. |
Время: 13:45.
© OSzone.net 2001-