У меня есть простой скрипт, который будет считывать значение в файле version.property и выполнять определенную работу мой код находится нижеПеременная не обновляется в функции пакетного файла
TITLE StartEODMaintenance
echo off
cls
set "Build=0"
call:FindString "MAINALGO"
IF /I "%Build%" == "MAINALGO" (
echo "start job on MainAlgo"
) else (
call:FindString "DRSITEALGO"
echo build value %Build%
IF /I "%Build%" == "DRSITEALGO" (
echo "start job on secondAlgo"
) else (
echo "sth wrong"
)
)
:FindString
echo funtioninput %~1
find /I /C "%~1" version.property
if %errorlevel%==1 (
echo "errorlevel 1"
set "Build=0"
)
if %errorlevel%==0 (
echo "errorlevel 0"
set "Build=%~1"
echo build value in function %Build%
)
:end
Содержание в version.property ниже
DRSITEALGO
проблема в том, я обнаружил, что при выполнении программы он выглядит ниже линии работы неправильно. Переменная Строить не устанавливается на значение в «% ~ 1»
set "Build=%~1"
меня ниже, как выход
funtioninput MAINALGO
---------- VERSION.PROPERTY: 0
"errorlevel 1"
funtioninput DRSITEALGO ---> the %~1 show the correct value, DRSITEALGO
---------- VERSION.PROPERTY: 1
"errorlevel 0"
build value in function 0 ---> here is wrong! the Build variable somehow didn't get updated, it suppose to be DRSITEALGO
build value 0
"sth wrong"
Не уверен, что я должен установить что-нибудь, чтобы сделать это работает ??
Попробуйте добавить 'SETLOCAL enabledelayedexpansion' в верхней части файла –
...и расширять переменные внутри циклов с помощью '!!', а не '%%'; проконсультируйтесь также [this] (http://stackoverflow.com/a/10558905/5047996) ... – aschipfl