Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] И вопросик по переменным (http://forum.oszone.net/showthread.php?t=239414)

NoIZz 26-07-2012 20:04 1959473

И вопросик по переменным
 
Нужно организовать некий счетчик и использовать нумерацию в переменных - те нужно использовать переменную в имени переменной
жаль виндовый шелл не позволяет создавать массивы

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

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

работает

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

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

kiripanda 26-07-2012 20:23 1959489

Лехко.
http://www.dostips.com/forum/viewtopic.php?f=3&t=2164

NoIZz 26-07-2012 20:51 1959505

Посмотрел - не врубился (((
честно
это не то что нужно

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

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

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

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

kiripanda 26-07-2012 21:34 1959545

Код:

@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 1959575

NoIZz,
Код:

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

set "var%varcount%=test"

call echo %%var%varcount%%%


NoIZz 26-07-2012 23:21 1959620

Спасибо! )))
Тупо не догадался бы использовать для вызова echo - call
Видно доки плохо читал

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

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

kiripanda 26-07-2012 23:40 1959634

можно использовать отложенное раскрытие переменных
Код:

@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 1959648

Это понятно
Но кому как


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

:loop

call :loop

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

kiripanda 27-07-2012 00:10 1959660

да ладно


Iska 27-07-2012 02:29 1959713

Цитата:

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

Что Вас удивляет? Что в пакетных файлах можно использовать рекурсивные функции?
читать дальше »
Код:

@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 1959781

Спасибо за просвещение
в документации я подобного не встречал


Время: 21:02.

Время: 21:02.
© OSzone.net 2001-