Вызовите скрипт ReadINI, используя один и тот же bat-файл - PullRequest
0 голосов
/ 14 ноября 2011

Мне нужно использовать только один bat-файл, поэтому я скопировал скрипт в мой bat-файл. Как я могу вызвать этот скрипт и использовать значение currval в локальной переменной?

@setlocal enableextensions enabledelayedexpansion
@echo off
set file=%1
set area=[%2]
set key=%3
set currarea=
for /f "delims=" %%a in (!file!) do (
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (
                echo !currval!
            )
        )
    )
)
endlocal

1 Ответ

2 голосов
/ 15 ноября 2011

Полагаю, вы ищете функции.

Вы можете вставить это в пакетный файл и вызвать его через call :myFunction, но, поскольку пакетные функции не возвращают значений, вам нужно сделать это явно, назначивприведите к переменной.

В вашем случае ваш код может выглядеть следующим образом

@echo off
setlocal enableextensions enabledelayedexpansion
call :myFunction %1 %2 %3
echo !result!
exit /b

:myFunction
set file=%1
set area=[%2]
set key=%3
set currarea=
for /f "delims=" %%a in (!file!) do (
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (
                set result=!currval!
            )
        )
    )
)
exit /b

Возможно, это не совсем подходит, поскольку требуется только один результат, но я надеюсь, что он указывает в правильном направлении.

...