Что нового

Генерация .bat файла содержащего русский текст

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Func GenerateSRDPC()
	Local $text = 'netsh advfirewall firewall set rule name="Дистанционное управление рабочим столом (TCP - входящий)" new enable=no'&@CRLF& _
	'netsh advfirewall firewall add rule name="Grifon - RDP Whitelist" dir=in action=allow protocol=TCP localport=3389 local="'&$ServerIP&'" remote="'&$ClientIP&'"'&@CRLF& _
	'pause'
	FileWrite($go_rdpc, $text)
	GUICtrlSetState($buttonStartSRDPC, @SW_ENABLE)
EndFunc

Есть такой кусок кода, он генерит батник и при нажатии на кнопку запускает его. Вопрос в том что получившийся батник не в той кодировке в которой нужно и русский текст там выглядит как:
Код:
C:\Users\qq\Documents\ISN AutoIt Studio\Projects\TeltUpdate>netsh advfi
rewall firewall set rule name="─шёЄрэЎшюээюх єяЁртыхэшх Ёрсюўшь ёЄюыюь (TCP - тї
юф ∙шщ)" new enable=no

Ни одно правило не соответствует указанным критериям.


C:\Users\qq\Documents\ISN AutoIt Studio\Projects\TeltUpdate>netsh advfi
rewall firewall add rule name="Grifon - RDP Whitelist" dir=in action=allow proto
col=TCP localport=3389 local="192.168.1.1" remote="192.168.1.156"
ОК.


C:\Users\qq\Documents\ISN AutoIt Studio\Projects\TeltUpdate>pause
Для продолжения нажмите любую клавишу . . .

Обычно когда я делаю руками, я использую какой-yибудь редактор типа Bred, а скриптом как?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Генерация .bat файла

Под ночь мозги вообще не соображают :(
Проблема в том что FileWrite сохраняет только водной кодировке, если использовать сперва FileOpen то можно будет сохранять файл в различных кодировках UTF, а как сохранить полученный результат чтобы BAT воспринимал русский?
Приложил два файла, один рабочий, сохраненный через Bred, второй сделанный автоитом
 

Вложения

  • 2.12 - disable default RDP rule - enable RDP Whitelist.zip
    543 байт · Просмотры: 4

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Belfigor
Я же вам привёл ссылку на два варианта сохранения. В зависимости от вызываемой функции (Unicode:CharToOemW или ANSI:CharToOemA) нужно открыть файл для записи в соответствующей кодировке (1024 или 512 соответственно). А FileWrite() сейчас по умолчанию пишет в UTF-8.

И вообще, попробуйте без перекодировки. Если хотите сохранить при помощи FileWrite() по умолчанию, то добавьте в начало батника строку
Код:
@chcp 65001 > nul
Если откроете файл для записи в ANSI, то измените строку на
Код:
@chcp 1251 > nul
Короче, нужно указать CMD кодировку батника (chcp = Change Code Page) и он сам всё должен сделать
Код:
Func GenerateSRDPC()
    Local $text = '@chcp 65001 > nul' & @CRLF
    $text &= 'netsh advfirewall firewall set rule name="Дистанционное управление рабочим столом (TCP - входящий)" new enable=no'&@CRLF& _
    'netsh advfirewall firewall add rule name="Grifon - RDP Whitelist" dir=in action=allow protocol=TCP localport=3389 local="'&$ServerIP&'" remote="'&$ClientIP&'"'&@CRLF& _
    'pause'
    FileWrite($go_rdpc, $text)
    GUICtrlSetState($buttonStartSRDPC, @SW_ENABLE)
EndFunc
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Всем большое спасибо! С утра и думается яснее, решилось с помощью ANSItoOEM
Код:
Func GenerateSRDPC()
    Local $text = 'netsh advfirewall firewall set rule name="Дистанционное управление рабочим столом (TCP - входящий)" new enable=no'&@CRLF& _
    'netsh advfirewall firewall add rule name="Grifon - RDP Whitelist" dir=in action=allow protocol=TCP localport=3389 local="'&$ServerIP&'" remote="'&$ClientIP&'"'&@CRLF& _
    'pause'
	$text = _Encoding_ANSIToOEM($text)
    FileWrite($go_rdpc, $text)
    GUICtrlSetState($buttonStartSRDPC, @SW_ENABLE)
EndFunc
 
Верх