Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата 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, код придется изменить

Последний раз редактировалось amel27, 22-04-2011 в 04:45. Причина: оформление

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:05, 21-04-2011 | #26