|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Некорректный разбор строки |
|
CMD/BAT - [решено] Некорректный разбор строки
|
Новый участник Сообщения: 29 |
Профиль | Отправить PM | Цитировать Пытаюсь в командном файле разобрать строку (это только для примера)
@echo off set STRING="1;2;3;4" echo %STRING% for /F "tokens=1,2,3,4 delims=;" %%a in (%STRING%) do ( set V1=%%a set V2=%%b set V3=%%c set V4=%%d ) echo var1=%V1% echo var2=%V2% echo var3=%V3% echo var4=%V4% Но если строка выглядит как STRING="1;;3;4", значения переменных "съезжают" (т.е. пустой будет переменная V4, а не V2). Как сделать правильный разбор строки, не меняя ее формата? |
|
Отправлено: 11:24, 04-06-2009 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата RedScorpio:
@echo off setlocal enabledelayedexpansion set STRING=1;;3;4 echo %STRING% set STRING=#%STRING:;=;#% for /F "tokens=1,2,3,4 delims=;" %%a in ("%STRING%") do ( set V1=%%a set V1=!V1:~1! set V2=%%b set V2=!V2:~1! set V3=%%c set V3=!V3:~1! set V4=%%d set V4=!V4:~1! ) echo var1=%V1% echo var2=%V2% echo var3=%V3% echo var4=%V4% Pause |
|
Отправлено: 11:46, 04-06-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата gora:
Цитата:
В примере строка была упрощена. В реальности может быть с пробелами, поэтому кавычки обязательны (STRING="text 1;;text 3;text 4" Но идея мне понравилась @echo off set STRING="1;;3;4" set STRING=%STRING:;;=;#;% echo %STRING% for /F "tokens=1,2,3,4 delims=;" %%a in (%STRING%) do ( set V1=%%a set V2=%%b set V3=%%c set V4=%%d ) echo var1=%V1% echo var2=%V2% echo var3=%V3% echo var4=%V4% Спасибо Рано обрадовался При STRING="1;;;4" уже не работает. Как бы set STRING=%STRING:;;=;#;% "засунуть" в цикл? |
|
Последний раз редактировалось RedScorpio, 04-06-2009 в 12:28. Отправлено: 12:16, 04-06-2009 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата RedScorpio:
@echo off set "STRING=text 1;;;text 4" echo %STRING% set temp_STRING="#%STRING:;=;#%" for /F "tokens=1,2,3,4 delims=;" %%a in (%temp_STRING%) do ( set V1=%%a set V2=%%b set V3=%%c set V4=%%d ) set V1=%V1:~1% set V2=%V2:~1% set V3=%V3:~1% set V4=%V4:~1% echo var1=%V1% echo var2=%V2% echo var3=%V3% echo var4=%V4% Pause Еще вариант. Ваша переменная STRING в кавычках и остается в неизменном виде: @echo off set STRING="text 1;;;text 4" echo %STRING% for /d %%i in (%STRING%) do set "temp_STRING=%%~i" set temp_STRING="#%temp_STRING:;=;#%" for /F "tokens=1,2,3,4 delims=;" %%a in (%temp_STRING%) do ( set V1=%%a set V2=%%b set V3=%%c set V4=%%d ) set V1=%V1:~1% set V2=%V2:~1% set V3=%V3:~1% set V4=%V4:~1% echo var1=%V1% echo var2=%V2% echo var3=%V3% echo var4=%V4% Pause |
|
Последний раз редактировалось gora, 04-06-2009 в 12:40. Отправлено: 12:29, 04-06-2009 | #4 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Работает.
Но опять изменение формата set "STRING=text 1;;;text 4" Строка set STRING="text 1;;;text 4" должна быть неизменной. В реальности она читается из файла конфигурации, который используется многими другими скриптами. Проблема возникла после того, как появилась необходимость читать этот файл под Windows (под Linux используется скрипт с awk/gawk) Т.е. нужно решить вопрос: Как бы set STRING=%STRING:;;=;#;% "засунуть" в цикл? Цитата gora: Цитата:
Не сообразил, что предварительно можно избавиться от кавычек Спасибо. |
||
Отправлено: 12:55, 04-06-2009 | #5 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать возможно тема безнадежно устарела, но я все равно напишу свое предложение по этой проблеме.
Идея состоит в том чтобы в вашем примере заменить тело цыкла do (...) на вызов процедуры. в этом варианте все красиво работает. переменная не выводит постоянно последнее значение наружного цыкла: мой пример несколько отличается, но смысл тот же: здесь поднимается файл, в котором перечислены полные пути типа d:\folder1\folder2\folder3..... пример перебирает строки из этого файла и передает их параметром на обработку в некую процедуру (в этом случае вынимаются слэши из строки). @echo off set wd=.\ set bd=.\backups for /F %%a in (backuper.cnf) do CALL :getFolder %%a goto :EOF :getFolder echo BackupTaskabout: %1 FOR /F "eol=; tokens=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 delims=\" %%i in ("%1") do set s=%%i %%j %%k %%l %%m%%n%%o%%p%%q%%r%%s%%t%%u%%v%%w echo folder %s% goto :EOF |
Отправлено: 17:52, 03-06-2011 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Не включается режим AGP 2X на Chaintech CT 6ATA2 и некорректный разгон выше 133МГц. | J7BXA | Материнские платы и память | 5 | 03-12-2009 19:59 | |
OSChooser разбор полета | InventoRs | Автоматическая установка Windows 2000/XP/2003 | 0 | 13-11-2009 00:54 | |
[решено] Разбор HTML-кода на логические части | Мартиша | Вебмастеру | 9 | 20-06-2009 00:09 | |
Разбор HTML кода | palmer_monk | Вебмастеру | 2 | 21-06-2006 15:29 | |
Некорректный логон WinXP в домен (AD на Win2003srv) | lantanoid | Сетевые технологии | 1 | 05-05-2005 17:32 |
|