Файл bat: переменные имеют неверное значение до следующего запуска bat? - PullRequest
0 голосов
/ 25 февраля 2011

Я читаю свойство из файла .properties (выглядит так: applocation = c: \ x \ y \ z). Используя строку: FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i

% 1 - это расположение файла .property, который я передаю в качестве аргумента.

После установки свойства я делаю:

эхо% applocation%

Однако в первый раз, когда я запускаю файл bat, он отражает местоположение, откуда я запустил файл bat. Только после повторного запуска файла bat из того же окна консоли я получаю правильное значение.

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

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Вы, вероятно, находитесь в блоке if или другого for там, я полагаю, такого как:

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i
    echo %applocation%
)

Это не может работать, поскольку переменные окружения раскрываются при разборе такой блок, а не при его запуске.

Чтобы использовать отложенное расширение, поместите

setlocal enabledelayedexpansion

вверху командного файла, а затем используйте

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i
    echo !applocation!
)
1 голос
/ 25 февраля 2011
...