Показать полную графическую версию : [решено] И вопросик по переменным
Нужно организовать некий счетчик и использовать нумерацию в переменных - те нужно использовать переменную в имени переменной
жаль виндовый шелл не позволяет создавать массивы
такой метод как
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
Посмотрел - не врубился (((
честно
это не то что нужно
то что переменным присвевается значение это понятно
но как его вывести явно - а не просто 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%%%
Спасибо! )))
Тупо не догадался бы использовать для вызова 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
запись понятнее и код работает быстрее
Это понятно
Но кому как
Над такой вещью до сих пор офигеваю
:loop
call :loop
вызов подпрограммы из самой себя - жесть
kiripanda
27-07-2012, 00:10
да ладно
http://i12.fastpic.ru/big/2010/1111/80/4718bce672a14a7565a0aa35ddf3df80.jpg
Над такой вещью до сих пор офигеваю »
Что Вас удивляет? Что в пакетных файлах можно использовать рекурсивные функции?
@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
Спасибо за просвещение
в документации я подобного не встречал
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.