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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сложение переменной с числом в FOR

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


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

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


Здравствуйте!
Имеется код:
Код: Выделить весь код
set c=0
for /f "eol=# delims== tokens=1,2" %%i in (out.qrs) do (
	set /a c=%c%+1
	set com_%c%=%%i
    set arg_%c%=%%j
)
Файл out.qrs содержит строки типа:
Код: Выделить весь код
x=111
y=222
z=333
В результате требуются переменные com_"номер строки" и arg_"номер строки" (Т.е. в данном случае %com_2%=y, а %arg_1%=111)
Но при запуске команды к переменной c не прибавляется 1 и получается для каждой строки com_0 и arg_0. В чем соль?

Отправлено: 18:15, 04-06-2013

 

Ветеран


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

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


opravdin, вот так:

Код: Выделить весь код
@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

set c=0
for /f "eol=# delims== tokens=1,2" %%i in (out.qrs) do (
	set /a c=!c!+1
	set com_!c!=%%i
        set arg_!c!=%%j
)

SET com_
SET arg_

PAUSE>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:56, 04-06-2013 | #2



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

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


Ветеран


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

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


opravdin, Georgio:
Код: Выделить весь код
	set /a c = c + 1
«set /a» всегда раскрывает переменные окружения. «Отложенно», т.е. непосредственно в момент исполнения команды.

Указанную же команду вообще можно сократить до:
Код: Выделить весь код
	set /a c += 1
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:41, 04-06-2013 | #3


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


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

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


Georgio, Iska, спасибо большое!
EnableDelayedExpansion уже был включен, напутал с % и !. Так же спасибо за упрощенную форму команды set

Отправлено: 19:57, 04-06-2013 | #4


Ветеран


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

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


Цитата Iska:
Указанную же команду вообще можно сократить до:

Код: Выделить весь код
set /a c += 1
»
Так и есть, только уточню: вместо команд
Код: Выделить весь код
set c=0
и
Код: Выделить весь код
set /a c=c+1
применять только
Код: Выделить весь код
set /a c+=1
.


Цитата opravdin:
Код: Выделить весь код
set com_%c%=%%i
set arg_%c%=%%j
»
А что здесь делать, если не
Код: Выделить весь код
SETLOCAL ENABLEDELAYEDEXPANSION
?

Последний раз редактировалось Georgio, 04-06-2013 в 20:25.


Отправлено: 20:18, 04-06-2013 | #5


Старожил


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

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


Код: Выделить весь код
	call set com_%%c%%=%%i
	call set arg_%%c%%=%%j

Отправлено: 20:52, 04-06-2013 | #6


Ветеран


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

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


Цитата kiripanda:
Код: Выделить весь код
call set com_%%c%%=%%i
call set arg_%%c%%=%%j
»
-- поясните.

Отправлено: 21:15, 04-06-2013 | #7


Ветеран


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

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


Цитата Georgio:
Так и есть, только уточню: вместо команд … применять только »
Корректнее всё-таки предварительно обнулять переменную, в которой накапливается сумма:
Код: Выделить весь код
set /a c = 0
дабы быть уверенным, что используемая переменная где-то ранее не получила числового значения.


Цитата Georgio:
поясните. »
Используется двойное раскрытие:
Код: Выделить весь код
call set arg_%%c%%=%%j
Другие, напротив, говорят, что здесь «%» используется как экранирующий символ:
Код: Выделить весь код
call set arg_%%c%%=%%j
Так или иначе, после вызова call в новый контекст на исполнение передаётся команда:
Код: Выделить весь код
set arg_%c%=<значение переменной цикла разбора «i»>

Последний раз редактировалось Iska, 04-06-2013 в 21:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:27, 04-06-2013 | #8


Старожил


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

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


Цитата Georgio:
поясните »
Код: Выделить весь код
@ECHO OFF &SETLOCAL

set /a c=0
for /f "eol=# delims== tokens=1,2" %%i in (out.qrs) do (
	set /a c=c+1
	call set com_%%c%%=%%i
	call set arg_%%c%%=%%j
)

SET com_
SET arg_
PAUSE
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:31, 04-06-2013 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
Assm - Сложение двух чисел Rebel666 Программирование и базы данных 8 22-04-2012 17:30
CMD/BAT - Сложение чисел в переменной Доктор Ливси Скриптовые языки администрирования Windows 2 12-01-2012 13:15
Проблема с числом пользователей JAZA Microsoft Windows NT/2000/2003 8 05-10-2006 15:09




 
Переход