PREVED
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте Подскажите пожалуйста, по возможности, "изящное" решение как с помощью батника вычитать значение параметра из ini-файла. Проблема в том, что кодировка ini-файла UTF-8 с сигнатурой. Поэтому любой русский текст (считанный из ini) в батнике превращается в крякозаблы. Собственно, задача - получить значение с нормальными (а не покореженными кириллическими символами) и записать это значение в переменную для дальнейшего использования в батнике. Для получения значения из ini использую вот такой код (скажу честно, подсмотрел на сайте strackoverflow): Код: call:GetParamFromIni "Parameter" ParameterValue goto ActionWithParameter :GetParamFromIni for /f "tokens=2 delims==" %%a in ('find "%~1=" "%IniFilePath%"') do @set %~2=%%a goto:eof :ActionWithParameter echo The parameter value is: %ParameterValue% | Где IniFilePath - путь до ini-файла, полученный ранее стандартными средствами. С латинскими символами работает "на ура", а вот с utf-8 беда. Да желательно нужно решение без лишних файловых операций (типа пересохранения исходного файла и его конвертации из одной кодировки в другую), если это возможно. Ну и чтобы работало в ОС начиная с WinXP и заканчивая Win10. Если потребуются дополнительные консольные утилиты - пусть так. Обновление Решил проблему с помощью консольной утилиты SSR (SSR ver 2.7, 2011 (c) Ross MacGregor ) 1. Перед получением параметра из ini конвертируем целевой файл(имеющий кодировку UTF-8) в стандартную для Windows кодировку ANSI. Записываем результат во временный файл с расширением .temp: Код: ssr -f "%IniFilePath%" -o "%IniFilePath%.temp" -e utf8 --output-encoding ansi --no-backup -s "zzzz" -r "zzzz" | где -s zzzz и -r zzzz - ничего не делают, т.к. замена текста не требуется (одноко эти аргументы командной строки у ssr обязательные) 2. Перед считыванием параметра из ini-файла, переключаем кодировку на windows-1251 (для кириллицы): Код: 3. Считываем параметр из ini-файла и записываем его значение в нужную нам переменную (код выше, начинается с call:GetParameterFromIni...). С той только разницей, что читаем значение параметра не из оригинального ini-файла, а из временного (переконвертированного из utf-8 в ansi). 4. После всех операций с полученной переменной, возвращаем кодировку на место: chcp 866>nul В результате, можно оперировать удобоваримым кириллическим текстом, взятым из файла с кодировкой Unicode. | Всего записей: 1988 | Зарегистр. 10-03-2006 | Отправлено: 21:37 26-02-2016 | Исправлено: PREVED, 19:31 27-02-2016 |
|