Я предлагаю этот код в ASCII / ANSI / OEM (один байт на символ), а не Unicode ( UTF-8 или UTF-16 , несколько байтов на символ) кодированный пакетный файл:
for /F "usebackq skip=1 delims=" %%G in ("install.cfg") do set "VERSION=%%G" & goto HaveValue
:HaveValue
echo Version read from file: %VERSION%
Кодировка символов, используемая процессором команд Windows по умолчанию в среде командной строки, выводится при запуске в окне CMD команды chcp
( ch ange c ode p age) без каких-либо параметров и зависит от региона / страны / региона, который установлен для используемой учетной записи пользователя.Рекомендуется (обычно, но не всегда) записывать пакетный файл, используя такую же кодировку символов соответственно кодовую страницу , которая используется по умолчанию командным процессором Windows в среде, используемой при запуске.пакетный файл, особенно в пакетном файле, содержащем символы со значением кода больше U + 007F (не-ASCII-символ).
FOR ожидает, что файл install.cfg
будет закодирован по одному байту на символ,install.cfg
также может быть в кодировке UTF-8 без или с меткой порядка байтов , если строка версии состоит только из символов ASCII.UTF-16 в кодировке install.cfg
не может быть обработан напрямую с помощью команды FOR с использованием этого кода в среде командной строки по умолчанию, загруженной при двойном щелчке по пакетному файлу.
Для понимания используемых команди как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
for /?
goto /?
set /?