Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.124.232] |
|
Сообщ.
#1
,
|
|
|
Вот такой код позволяет читать данные из cfg-файла:
for /f "eol=# delims== tokens=1*" %%i in (%~dpn0.cfg) do ( set %%i=%%j ) # это коммент mainpath=%ProgramFiles(x86)%\MyDir mainexe=MyProg.exe Но тут есть проблема. Мы получаем переменные окружения со значениями: mainpath=%ProgramFiles(x86)%\MyDir mainexe=MyProg.exe Т.е. как есть. Строка "%ProgramFiles(x86)%" не раскрывается в "C:\Program Files (x86)" Соответственно if exist %mainpath%\%mainexe% set found=1 не сработает. Что можно изменить в этом коде, чтобы %-переменные раскрывались? p.s. Мне не нужно просто вывести на экран значение через cmd /c echo %mainpath%, мне надо заполучить эти значения в переменную окружения... |
Сообщ.
#2
,
|
|
|
Перед set напиши call. Тогда произойдёт две подстановки.
И появится ещё одна иногда полезная штука - в именах параметров тоже можно будет использовать переменные окружения Я кстати пишу немного проще: for /f "eol=# delims=" %%i in (%~dpn0.cfg) do call set %%i |
Сообщ.
#3
,
|
|
|
amk, отлично, спасибо. А то я уже вот так хотел сделать:
@echo off setlocal EnableExtensions EnableDelayedExpansion for /f "eol=# delims== tokens=1*" %%i in (%~dpn0.cfg) do (call :Do set %%i=%%j&echo !%%i!) exit /b :Do %*&exit /b Проблема в твоём коде (да и в моём, и в других, которые предлагают) с обработкой символов ! и ^, но это можно решить вот так: @echo off for /f "eol=# delims== tokens=1*" %%i in (%~dpn0.cfg) do (call set %%i=%%j) setlocal EnableExtensions EnableDelayedExpansion if exist "%mainpath%\%mainexe%" echo OK А в конфиге для файла с именем My^Prog!.exe писать так: # Settings mainpath=%ProgramFiles(x86)%\MyDir mainexe=My^^Prog^!.exe Добавлено Попробовал сейчас... пипец как долго работает эта конструкция!!! Файл на 125 строк обрабатывается около секунды!!! Мой вариант тоже не шустряк, но всё же быстрее. Однако ! нужно будет заменять уже на ^^!, символ ^ заменяется на ^^, а вот когда оба этих символа встречаются, тогда ^ нужно заменять аж на ^^^^. Жесть! |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ Там в любом случае проблема, ^ либо удваивается, либо интерпретируется, как экранирующий. В результате невозможно обработать список файлов, если в каком-то из имён есть ^.Проблема в твоём коде (да и в моём, и в других, которые предлагают) с обработкой символов ! и ^, но это можно решить вот так: Поэтому собираюсь переписать свои скрипты на Питон. Там этих текстовых макроподстановок нет. |