Войти

Показать полную графическую версию : [решено] И вопросик по переменным


NoIZz
26-07-2012, 20:04
Нужно организовать некий счетчик и использовать нумерацию в переменных - те нужно использовать переменную в имени переменной
жаль виндовый шелл не позволяет создавать массивы

такой метод как

VARCOUNT=0
set /A VARCOUNT=%VARCOUNT%+1
set VAR%VARCOUNT%=Text

работает

Те если явно указать переменную %VAR0%, %VAR1% то все ОК

но мне надо что-то типа того - echo %VAR%VARCOUNT%
это решаемо?

kiripanda
26-07-2012, 20:23
Лехко.
http://www.dostips.com/forum/viewtopic.php?f=3&t=2164

NoIZz
26-07-2012, 20:51
Посмотрел - не врубился (((
честно
это не то что нужно

то что переменным присвевается значение это понятно

но как его вывести явно - а не просто set

яж грю - это работает
VARCOUNT=0
set /A VARCOUNT=%VARCOUNT%+1
set VAR%VARCOUNT%=Text

echo %VAR1% выведет Text
а как мне цифру в переменной задать другой переменной при выводе - с помощью echo например
или опять же разбирать в цикле вывод set VAR
???

kiripanda
26-07-2012, 21:34
@echo off &setlocal enableextensions

set "phrase=Hello everyone! Hello! Helllooo!!1 Helllooooo!!!1 Hellloooooooo!!!!11"

set /a word=0
call :loop "%phrase%"
set /a word-=1

set word
echo.
echo word from 0 to %word%
for /l %%i in (0,1,%word%) do (
call echo.%%word.%%i%%
)
echo.

echo word from %word% to 0
for /l %%i in (%word%,-1,0) do (
call echo.%%word.%%i%%
)
echo.

echo word from 0 to %word% by step 2
for /l %%i in (0,2,%word%) do (
call echo.%%word.%%i%%
)
echo.

echo word from %word% to 0 by step 3
for /l %%i in (%word%,-3,0) do (
call echo.%%word.%%i%%
)
echo.

goto :eof


:loop
for /f "tokens=1,*" %%a in ("%~1") do (
set "word.%word%=%%a"
set /a word+=1
call :loop "%%b"
)
goto :eof

Foreigner
26-07-2012, 22:20
NoIZz,

set "varcount=0"
set /a varcount+=1

set "var%varcount%=test"

call echo %%var%varcount%%%

NoIZz
26-07-2012, 23:21
Спасибо! )))
Тупо не догадался бы использовать для вызова echo - call
Видно доки плохо читал

p.s. Очень отзывчивый народ на этоv форуме )))

p.s.2. просто из командной строки - %var%varcount%%

kiripanda
26-07-2012, 23:40
можно использовать отложенное раскрытие переменных
@echo off &setlocal enableextensions

set "phrase=Hello everyone! Hello! Helllooo!!1 Helllooooo!!!1 Hellloooooooo!!!!11"

set /a word=0
call :loop "%phrase%"
set /a word-=1

set word
echo.
echo word from %word% to 0
for /l %%i in (%word%,-1,0) do (
setlocal enabledelayedexpansion
echo.!word.%%i!
endlocal
)
echo.

echo word from 0 to %word% by step 2
for /l %%i in (0,2,%word%) do (
setlocal enabledelayedexpansion
echo.!word.%%i!
endlocal
)
echo.

goto :eof


:loop
for /f "tokens=1,*" %%a in ("%~1") do (
set "word.%word%=%%a"
set /a word+=1
call :loop "%%b"
)
goto :eof

запись понятнее и код работает быстрее

NoIZz
26-07-2012, 23:57
Это понятно
Но кому как


Над такой вещью до сих пор офигеваю

:loop

call :loop

вызов подпрограммы из самой себя - жесть

kiripanda
27-07-2012, 00:10
да ладно

http://i12.fastpic.ru/big/2010/1111/80/4718bce672a14a7565a0aa35ddf3df80.jpg

Iska
27-07-2012, 02:29
Над такой вещью до сих пор офигеваю »
Что Вас удивляет? Что в пакетных файлах можно использовать рекурсивные функции?
@echo off
setlocal enableextensions enabledelayedexpansion

call :Reverse "Мама мыла раму"

echo [%Reverse%]

endlocal
exit /b 0

:Reverse
setlocal enableextensions enabledelayedexpansion
set sOutName=%~0

set sValue=%~1

if defined sValue (
call :Reverse "%sValue:~1%"
set sResult=!Reverse!%sValue:~0,1%
)

endlocal & set %sOutName:~1%=%sResult%
exit /b

NoIZz
27-07-2012, 09:04
Спасибо за просвещение
в документации я подобного не встречал




© OSzone.net 2001-2012