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

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

Ответить
Настройки темы
CMD/BAT - Работа с переменными в цикле

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


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

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


PHP код: Выделить весь код

@echo off

cd 
/d D:httpd
REM cmdow
.exe @ /HID
FOR /%%I In (0#,1#,7#) Do (
SET V hui
 SET V
=%%I
echo 
= %V= %%I%


выводит
PHP код: Выделить весь код


1
2


5
6


если еще раз запустить то

PHP код: Выделить весь код

7 I 0

7 I 1
7 I 2
7 I 3
7 I 4
7 I 5
7 I 6
7 I 

а надо
PHP код: Выделить весь код

0 I 0

1 I 1
2 I 2
3 I 3
4 I 4
5 I 5
6 I 6
7 I 

что нет так?? я чего то не врубаюсь? и не подскажите как работать с переменными в цикле? почему где то в инете один процент, где то два , где то три? в интернете конкретной информации не нашел

Отправлено: 18:15, 02-08-2012

 

Ветеран


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

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


DarkDream604,
Код: Выделить весь код
@echo off
SetLocal enabledelayedexpansion
FOR /L %%I In (0,1,7) Do (
SET V=%%I
echo V = !V! I = !V! 
) 
pause
Если переменная назначается внутри цикла, то знак % заменяется на знак !

Отправлено: 19:00, 02-08-2012 | #2



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

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


Ветеран


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

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


sov44, не совсем так. Переменные окружения, обрамлённые «%…%», раскрываются однократно при входе в скобки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:13, 02-08-2012 | #3


Аватара для El Sanchez

Ветеран


Contributor


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

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


DarkDream604, переменная %V%, не является переменной цикла, поэтому ее раскрытие произойдет не во время выполнения тела цикла , а до него, и только один раз. Первый вывод на экран показывает, что при отработке тела цикла создается переменная %V%, но значение ее пусто, так как раскрытие уже произошло. Но при выполнении цикла переменная %V% меняет свое значение, по окончании которого оно равно 7. Это подтверждает второй вывод на экран, где опять же %V% раскрывается один раз. Чтобы переменная %V% раскрывалась во время выполнения цикла нужно включить режим отложенного раскрытия переменных, как это сделал sov44, написав строку SetLocal enabledelayedexpansion. В таком режиме символы процента для переменной, раскрытие которой нужно отложить, меняется на восклицательный знак. Режим можно и не включать, а использовать трюк с оператором CALL:
Код: Выделить весь код
@Echo Off
SetLocal
FOR /L %%I In (0#,1#,7#) Do (
  Set V=%%I
  Call Echo:V=%%V%% I=%%I
)
Обратите внимание на выделенное красным. Я удвоил символы процента в имени переменной для того, чтобы раскрытие произошло 2 раза - первый раз интерпретатором перед выполнением, когда раскрывается все, что можно раскрыть (cимвол процента экранируется самим собою, поэтому при первом раскрытии от %%V%% останется только %V%), второй раз интерпретатором при выполнении команды CALL, которая на вход получит строку Echo:V=%V% I=тут уже будет какое-то значение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:53, 02-08-2012 | #4


Пользователь


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

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


Как работает отложенное раскрытие переменных для времени?
Код: Выделить весь код
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in (`time /t`) do set sTime=%%~i
pause ::пауза, чтобы создать разницу во времени
echo !sTime!
И все равно: конечное время - время присваивания переменной значения time /t, а не время снятия паузы. Я чего-то не понимаю...
Просто, чтобы уяснить.

Отправлено: 16:08, 03-03-2015 | #5


Ветеран


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

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


Не понимаете. Отложенное раскрытие, а не отложенное присвоение. Впрочем, в данном случае и отложенное раскрытие ни к чему.

Отправлено: 16:19, 03-03-2015 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - работа с 2 текстовыми файлами, именами файлов и всё в цикле Тишина Скриптовые языки администрирования Windows 4 15-07-2012 20:26
CMD/BAT - [решено] Батник для работы с 2 переменными. wormfaker Скриптовые языки администрирования Windows 2 11-07-2011 04:39
CMD/BAT - затруднения в работе с переменными cher Скриптовые языки администрирования Windows 3 23-06-2011 21:46
AHK: MouseClick пользовался переменными данными Wedmet AutoIt 2 15-12-2010 16:18
проблема с переменными окружения Vasosel Microsoft Windows NT/2000/2003 2 12-07-2006 14:21




 
Переход