Цитата BigBoo:
обнаружилась новая проблема, связанная с кодировкой »
|
именно поэтому нужно сразу давать пример, максимально приближенный к "боевым" условиям, а не тот куцый, что из первого поста
Цитата BigBoo:
а если для прикола сохранить в UTF-8 - скрипт такое с standard_menu.ini вытворяет, мама не горюй »
|
на самом деле, если всё аккуратно сделать - убрать BOM и заэкранировать спецсимволы, то всё работает... просто в батнике в команде SET вместо русских букв будут "крякозябки", но ему по большому счету всё равно что менять... и понятное дело, учет регистра букв работать не будет
напрямую батник с UTF8 работать не может, так как для Windows "родными" являются OEM/ANSI/UTF-16 кодировки, но можно сделать предварительное преобразование в любую из этих кодировок, а после обработки вернуть в исходную (UTF8), вот пример для исходного файла UTF-8
with BOM:
читать дальше »
Код:

@echo off
set $par=Item, "Speed Dial - логотип вместо страницы"
set $val=Set preference,"User Prefs|Thumbnail Logo Score Logo URL=75" ^| Set preference,"User Prefs|Thumbnail Logo Score Logo URL=0"
CALL:INISET 1.txt paste $par $val
EXIT
:INISET %utf8_file_with_BOM% %section% parm val
::----------------------------------------------
SETLOCAL DisableDelayedExpansion
set $sn= & set "$t1=%TEMP%\%RANDOM%%RANDOM%.tmp"
set $vf=0& set "$t2=%TEMP%\%RANDOM%%RANDOM%.tmp"
chcp 65001|cmd/u/c Type "%~1">"%$t1%"&chcp 866>nul
(for /f "tokens=1* delims==]" %%a in ('type "%$t1%"^|find/n /v ""') do (set "$b=%%b"
SETLOCAL EnableDelayedExpansion
if "!$b:~0,1!"=="[" set "$sn=!$b:~1,-1!"
for /f "delims==" %%p in ("!$b!") do set "$p=%%p"
if /i not "!$sn!"=="%~2" (echo/!$b!) else (
if /i not "!$p!"=="!%~3!" if /i not "!$p!"=="!%~3! " echo/!$b!)
if "!$sn!"=="%~2" if "!$vf!"=="0" set $vf=1& echo/!%~3!=!%~4!
for /f "tokens=1,2 delims=:" %%i in ("!$sn!:!$vf!") do (
ENDLOCAL& set "$sn=%%i"& set "$vf=%%j"
)))>"%$t2%"
set/p $="я╗┐">"%$t1%"<nul
(for /f "usebackq delims=" %%a in ("%$t2%") do (set "$a=%%a"
CHCP 65001|cmd/v/c "echo/!$a!"&CHCP 866>nul))>>"%$t1%"
copy /y "%$t1%" "%~1">nul&& del "%$t1%"
::----------------
ENDLOCAL& GoTo:EOF
P.S. красным выделен BOM для UTF-8, лучше скопировать его с любого UTF8-текстовика
P.P.S. если исходный файл не содержит
BOM, код придется изменить