У меня есть простой ini-файл ... действительно просто файл key = value, который я хочу использовать для установки в качестве переменных для моего скрипта.Пакетный файл для циклических динамических переменных из файла без setlocal?
Мой ини файл:
DATABASE=snoopy
Мой код Пакетный файл
@echo off
SET DATABASE=woodstock
FOR /f "tokens=1,2 delims==" %%a in ('C:\mycfg.ini') do (
echo a=%%a
echo b=%%b
pause
SET %%a=%%b
ECHO DATABASE=%DATABASE%
)
эхо-а и Ь правильно, он показывает
a=DATABASE
b=snoopy
Но в конце, когда я эхо % DATABASE% после вызова SET %% a = %% b Он по-прежнему показывает
DATABASE=woodstock
Если я использую задержанное расширение, оно работает, но только локально. Мне нужно, чтобы он перезаписывал глобальный, поэтому я не понимаю, почему это не должно работать.
Не могли бы вы объяснить, что вы подразумеваете под «local» или «global»? Является ли «local» текущим CMD-окном и «глобальным» набором переменных среды, которые устанавливаются при открытии нового окна CMD из * меню «Пуск» * (например, все будущие окна CMD)? BTW. Вы не сможете изменять другие открытые CMD-окна. –
Я имею в виду использование SetLocal/EndLocal .. На самом деле, думая об этом, я использую SetLocal перед циклом for. Возможно, я должен использовать его в верхней части файла. Я попробую это – Dss
Когда вы включили задержку расширения, вы изменили свое эхо, чтобы использовать оператор замедленного расширения? 'ECHO DATABASE =! DATABASE!' – indiv