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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как работать с переменной внутри цикла FOR?

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


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

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


Подскажите, пожалуйста. Не могу понять, что происходит.
Мне нужно, чтобы при каждой итерации в цикле for (кусок кода ниже) переменная j увеличивалась на 1. Но даже присваивание ей не работает: на каждом шаге получаю "before: 1, after: 1". Что я делаю не так?

Код: Выделить весь код
SET j=1
FOR /F %%a in ('dir /b .\*.jpg') do (
@echo before %j%
@SET /a j = %j% + 1 
@echo after %j%
REM тут вырезано все, что не относилось к этой ошибке
)

Отправлено: 22:04, 29-09-2010

 

Аватара для gora

Ушёл из жизни


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

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


Переменные в цикле заключите в восклицательные знаки (!) вместо знаков процента (%), а в начало скрипта добавьте Setlocal EnableDelayedExpansion
Примерно так:
Код: Выделить весь код
Setlocal EnableDelayedExpansion
SET j=1
FOR /F %%a in ('dir /b .\*.jpg') do (
@echo before !j!
@SET /a j = j + 1 
@echo after !j!
REM тут вырезано все, что не относилось к этой ошибке
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:11, 29-09-2010 | #2



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

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


Старожил


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

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


Или без EnableDelayedExpansion так:
Код: Выделить весь код
@echo off
SET j=1
FOR /F %%a in ('dir /b .\*.jpg') do call :cnt "%%a"
goto :eof

:cnt
echo before %j%
SET /a j = j + 1
echo after %j%
REM тут вырезано все, что не относилось к этой ошибке
)
goto :eof
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:17, 29-09-2010 | #3


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


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

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


Большое спасибо!
И то, и другое сработало.

Отправлено: 22:28, 29-09-2010 | #4


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


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

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


Товарищи знатоки, устал пытаться реализовать такую штуку, что бы указанный логин разбирался по буквам в цикле
мне надо из admin получить
a
d
m
i
n
если сделать так

set login=admin
setlocal enabledelayedexpansion
SET j=0
for /L %%i in (1,1,5) do (
ping -n 1 -w 200 192.168.254.254 >nul
SET /a j=j+1
@echo after !j!
echo !login:~0,%%i!
)
endlocal

то получаю
a
ad
adm
admi
admin

что собственно и логично...
А вот что бы получить что мне надо по идее надо бы засунуть переменную j в переменную login тобиш вот так
echo !login:~!j!,%%i!

вот тут то и загвоздка... Очень прошу помочь. Заранее спасибо.

Отправлено: 10:36, 13-06-2013 | #5


Аватара для gora

Ушёл из жизни


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

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


dimitrioglo,
Цитата dimitrioglo:
что бы указанный логин разбирался по буквам в цикле »
Код: Выделить весь код
@Echo Off
Setlocal EnableDelayedExpansion
Set login=admin
For /L %%i In (0,1,4) Do (
	Ping -n 1 -w 200 192.168.254.254 >nul
	Echo !login:~%%i,1!
)
Endlocal
Pause>nul
Код: Выделить весь код
@Echo Off
Set login=admin
For /L %%i In (0,1,4) Do (
	Ping -n 1 -w 200 192.168.254.254 >nul
	Call Echo %%login:~%%i,1%%
)
Pause>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 13-06-2013 | #6


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


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

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


Спасибо огромное.!
Мне где то даже стыдно)) решение очень красивое, чето я стормозил)))

Отправлено: 11:25, 13-06-2013 | #7


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


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

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


Не плохо продвинулся в своей задаче, но опять ступор... прошу отозваться всех кто знает...
как бы мне проверять в каком регистре получет переменная символы, например:

если "символ" в верхнем регистре сделать то и то...
если в нижнем - другое

не нашел стандартной команды в CMD

Отправлено: 18:40, 13-06-2013 | #8


Ветеран


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

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


dimitrioglo:
Цитата:
если "символ" в верхнем регистре сделать то и то... »
Например (без сторонних утилит):
Код: Выделить весь код
@echo off
setlocal

set "var=a"

for /f "tokens=2 delims=:" %%i in (' "2>&1 find "" %var%" ') do (

    if " %var%"=="%%i" (echo %var% is UPPERCASE) else (echo %var% is lowercase)

)

Последний раз редактировалось Foreigner, 14-06-2013 в 07:36.


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


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


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

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


Цитата Foreigner:
Код: Выделить весь код
set "var=a"
for /f "tokens=2 delims=:" %%i in (' "2>&1 find "" %var%" ') do (
if " %var%"=="%%i" (echo %var% is UPPERCASE) else (echo %var% is lowercase)
)
»
К сожалению такая конструкция не работает... она вообще ничего не выводит... стало быть что то в строке с for

Последний раз редактировалось dimitrioglo, 14-06-2013 в 18:40.


Отправлено: 14:46, 14-06-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
VBA - Как присвоить переменной содержимое Range на VBA for WORD Selena57 Программирование и базы данных 1 25-03-2009 00:52
[решено] Первая строчка переменной. Как скопировать? r35TnX AutoIt 5 06-03-2009 07:12
CMD/BAT - [решено] как правильно передать переменные подпрограмме из цикла for akrav Скриптовые языки администрирования Windows 4 07-01-2008 17:51
js имя объекта из переменной, как? E-mail Вебмастеру 13 15-03-2005 07:22




 
Переход