Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Восстановление шрифтов после сбоя (крякозябры в окнах Windows вместо русского текста)

Ответить
Настройки темы
CMD/BAT - Восстановление шрифтов после сбоя (крякозябры в окнах Windows вместо русского текста)

Пользователь


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

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


Изменения
Автор: Dragokas
Дата: 19-10-2013
Пилотный вариант. Хочу услышать замечания/предложения.

Совместимость: Windows 7 ru x32, x64.

Как запускать

1. Распаковать архив.
2. Нажимаем Win + R, intl.cpl
Либо открыть ПУСК -> Выполнить -> Панель управления -> Часы, язык и регион -> Язык и региональные стандарты.
Проверить настройки, указанные на скриншотах (потом автоматизирую, если это реально).
3. Запустить RU_Codepage_Repair_Win7.cmd
4. Перезагрузить систему.

Алгоритм работы:

1. Создается резервная копия веток реестра:
Цитата:
HKCU\Control Panel\International
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
а также файлов *.NLS из Windows\system32
2. Производится замена файлов NLS и веток реестра на "чистые" из оригинального дистрибутива MSDN (папка original).
В процессе работы оригинальные NLS переименовуются в NLS_, т.к. все еще используются системой.
После перезагрузки системы все _NLS удаляются из-под ключа реестра RunOnceEx.
Для получения доступа к NSL, права на них "обнуляются" с предварительным сохранением в ACL-таблицу. После замены файлов - права возвращаются обратно.

Сам Batch-файл:
читать дальше »
Код: Выделить весь код
@set @x=0; /*
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
echo Патч восстановления оригинальных файлов русской кодировки
echo.
echo.
:: Проверка версии ОС
If /i "%PROCESSOR_ARCHITECTURE%"=="x86" (set Core=x32) else (set Core=x64)
set /p "=Версия ОС: %Core% "<nul
ver| find "6.1." || (echo Поддерживается только Windows 7& echo.& pause& Exit)
 
:: Получаем права Администратора
if "%1"=="" cscript.exe //nologo //e:jscript "%~f0"& Exit
echo Права Администратора получены.
echo.
echo Этап резервного копирования
echo.
 
:: Переходим в папку с Batch-файлом
cd /d "%~dp0"
 
if not exist Backup md Backup
 
:: Резервирование файлов *.NLS
if exist Backup\*.nls (
  echo Внимание: резервная копия файлов кодовых страниц была создана ранее.
  set ch=
  set /p "ch=Хотите удалить ее? (Y/N) "
  if /i "!ch!"=="Y" del /q Backup\*.nls
)
echo n|>nul copy /-y "%windir%\system32\C*.nls" Backup\*.*
echo.
echo Резервное копирование завершено.
 
:: Резервное копирование заменяемых кустов реестра
if exist Backup\*.reg (
  echo Внимание: резервная копия заменяемых ключей реестра была создана ранее.
  set ch=
  set /p "ch=Хотите удалить ее? (Y/N) "
  if /i "!ch!"=="Y" del /q Backup\*.reg
)
echo n| reg export "HKCU\Control Panel\International" Backup\International.reg
echo n| reg export "HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage" Backup\CodePage.reg
echo n| reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" Backup\Font.reg
echo.
 
echo.
echo Этап замены файлов кодировок
echo.
 
echo Сохраняю права на NSL-файлы в таблицу ACL
icacls "%windir%\system32\C*.NLS" /save "Backup\CodePage.ACL" /C >nul
echo.
echo Изменяю владельца на себя
takeown /f "%windir%\system32\C*.NLS" >nul
echo.
echo Получаю полные права
echo y|>nul cacls "%windir%\system32\C*.NLS" /e /g "%username%":f
echo.
echo Начат процесс замены файлов на оригинальные...
echo.
:: Переименовую все *.NLS в *.NLS_, чтобы обойти блокировку доступа к файлам, имеющим открытые дескрипторы
echo Переименование
ren "%windir%\system32\C*.NLS" *.NLS_
echo.
echo Замена
copy /y "Original\*.nls" "%windir%\system32\*.*" >nul
echo.
echo Переназначаю владельца на исходного - TrustedInstaller
icacls "%windir%\system32\C*.NLS" /setowner "NT Service\TrustedInstaller" /C >nul
echo.
echo Восстанавливаю права, исходя из эталонной таблицы ACL
echo.
icacls "%windir%\system32" /restore "Backup\CodePage.ACL" /C >nul
 
echo.
echo.Заменяю записи реестра...
reg import Original\International.reg
reg import Original\CodePage.reg
reg import Original\Font.reg
 
:: Удаление переименованных файлов NLS после перезагрузки
set key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\1
reg add "%key%" /f /v 1 /t REG_SZ /d "cmd /c del /f /q %windir%\system32\C*.NLS_"
 
echo.
echo Все операции завершены.
echo.
echo Требуется перезагрузка системы Windows.
set ch=
set /p "ch=Введите Y для продолжения: "
if /i "%ch%"=="Y" shutdown -r -t 1
 
pause& Exit /B
 
*/new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);

Отправлено: 02:40, 13-08-2013

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Восстановление шрифтов после сбоя (крякозябры в окнах Windows вместо русского текста)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Распознавание русского рукописного текста на английской Windows? chippo Microsoft Windows 7 1 24-10-2011 17:50
Интерфейс - После смены локального языка возникла проблема с распознов русского текста rivon Microsoft Windows 2000/XP 9 22-09-2011 19:30
Ошибка - [решено] Крякозябры в приложениях вместо русского текста Gerbok Microsoft Windows 2000/XP 2 02-04-2011 16:44
Загрузка - Восстановление после сбоя. Disconnect Microsoft Windows 7 15 10-12-2010 11:54
Восстановление работоспособности принтера после сбоя raueber Сетевые технологии 6 02-02-2007 09:16




 
Переход