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

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

Ответить
Настройки темы
CMD/BAT - исправить кодировку при вставке строки

Аватара для chek

Ветеран


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

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


всем привет.
друзья, есть файл (см вложение) в кодировке UCS-2 LE BOM
есть простой батник
Код: Выделить весь код
set sword=CommonCfgLocation=\\SQLSERVER\Common1C\1CESCmn.cfg
find /i "%sword%" %AppData%\1C\1CEStart\1CEStart.cfg
echo %ERRORLEVEL%
if %ERRORLEVEL%==1 (
echo. >> %AppData%\1C\1CEStart\1CEStart.cfg
echo. >> %AppData%\1C\1CEStart\1CEStart.cfg
echo %sword% >> %AppData%\1C\1CEStart\1CEStart.cfg
)
после того, как строка добавляется, она не читается. как исправить ситуацию?

Отправлено: 17:54, 09-03-2017

 

Ветеран


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

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


Цитата chek:
(см вложение) »
Нет вложения.

Цитата chek:
после того, как строка добавляется, она не читается. как исправить ситуацию? »
Не использовать пакетные файлы. Использовать WSH/PoSH.

Цитата chek:
UCS-2 »
UTF-16.

Отправлено: 18:16, 09-03-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

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


Вот примерная болванка на WSH (не знаю, зачем там две пустые строки предварительно добавлять, но, коль Вы так написали…):
Скрытый текст
Код: Выделить весь код
Option Explicit

Const ForReading   = 1
Const ForAppending = 8

Const TristateTrue       = -1


Dim strPattern
Dim strSourceFile

Dim strContent


strPattern    = "CommonCfgLocation=\\SQLSERVER\Common1C\1CESCmn.cfg"
strSourceFile = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%AppData%\1C\1CEStart\1CEStart.cfg")

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FileExists(strSourceFile) Then
		With .OpenTextFile(strSourceFile, ForReading, False, TristateTrue)
			strContent = .ReadAll()
			.Close
		End With
		
		If Not InStr(1, strContent, strPattern, vbTextCompare) > 0 Then
			With .OpenTextFile(strSourceFile, ForAppending, False, TristateTrue)
				.WriteBlankLines 2
				.WriteLine strPattern
				.Close
			End With
		End If
	Else
		WScript.Echo "Can't find source file [" & strSourceFile & "]."
		WScript.Quit 1
	End If
End With

WScript.Quit 0

Отправлено: 18:36, 09-03-2017 | #3


Аватара для chek

Ветеран


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

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


Вложения
Тип файла: txt 1CEStart.txt
(94 байт, 5 просмотров)

добавил файл.
хотелось бы с помощью батника, т.к. будет распространятся с помощью ГП и добавится в уже существующий start.bat.

Отправлено: 08:52, 10-03-2017 | #4


Аватара для chek

Ветеран


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

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


написал на поше
Код: Выделить весь код
$ma = Get-Item $env:APPDATA\1C\1CEStart\1CEStart.cfg | Get-Content
$tt = "SQLSERVER\\Common1C\\1CESCmn.cfg"
if ($ma -match $tt) {} else {
Add-Content $env:APPDATA\1C\1CEStart\1CEStart.cfg "`nCommonCfgLocation=\\SQLSERVER\Common1C\1CESCmn.cfg"
}
результат тот же - вставляет иероглифы.

Отправлено: 14:20, 10-03-2017 | #5


Ветеран


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

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


если bat в 866 и файл потом читать в 866й, то cmd сможет разве это:
Код: Выделить весь код
@echo off
set "f=1CEStart.txt"
set "sword=CommonCfgLocation=\\SQLSERVER\Common1C\1CESCmn.cfg"
>>$ (
 <"%f%">nul find /i "%sword%" || (
  more "%f%"
  echo.
  echo.
  echo %sword%
 )
)& move $ "%f%"
exit
или уже измененый в конце файл конвертируйте с помощью PoSh в utf-16, если так нужно.
А чем на vbs что Iska написал не устраивает, он же есть в системе, ничего устанавливать не нужно.

Отправлено: 14:37, 10-03-2017 | #6


Ветеран


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

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


Цитата chek:
хотелось бы с помощью батника, »
chek, «батники» пакетные файлы очень ограниченно работают с юникодом.

Цитата chek:
хотелось бы с помощью батника, т.к. будет распространятся с помощью ГП и добавится в уже существующий start.bat. »
Групповой политике глубоко наплевать, будет ли там пакетный файл, скрипт WSH или скрипт PoSH. Или даже несколько. Или вперемешку.

Кого «осенила» «светлая» идея дать пакетному файлу имя одной из внутренних команд командного процессора?!

Цитата chek:
написал на поше … результат тот же - вставляет иероглифы. »
Без разницы — хоть на WSH, хоть на PowrShell — всё будет лучше, нежели на пакетных файлах.

Не нравится чем-то вышеприведённый WSH — держите аналогичный на PoSH:
Скрытый текст
Код: Выделить весь код
$sPattern    = 'CommonCfgLocation=\\SQLSERVER\Common1C\1CESCmn.cfg'
$sSourceFile = "$($env:AppData)\1C\1CEStart\1CEStart.cfg"

if(Test-Path -Path $sSourceFile -PathType Leaf) {
    if(-not (Select-String -Path $sSourceFile -Encoding unicode -Pattern $sPattern -SimpleMatch -Quiet)) {
        Add-Content -Path $sSourceFile -Encoding Unicode -Value "`r`n`r`n$sPattern"
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:52, 10-03-2017 | #7


Аватара для chek

Ветеран


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

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


Цитата alpap:
уже измененый в конце файл конвертируйте с помощью PoSh в utf-16 »
подскажите, как это сделать?
немного видоизменил скрипт
Код: Выделить весь код
$ma = Get-Item $env:APPDATA\1C\1CEStart\1CEStart.cfg | Get-Content
$tt = "SQLSERVER\\Common1C\\1CESCmn.cfg"
if ($ma -match $tt) {} else {
$tt | Out-File $env:APPDATA\1C\1CEStart\1CEStart.cfg -Encoding utf8 -Append }
но конечный файл все-равно сохраняется в UCS-2 LE BOM
Цитата alpap:
А чем на vbs что Iska написал не устраивает »
к сожалению у меня совсем нет познаний в этом языке, а хочется не только получить результат, но и научиться.

Отправлено: 15:00, 10-03-2017 | #8


Ветеран


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

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


Цитата chek:
а хочется не только получить результат, но и научиться. »
chek, перед Вашим последним сообщением — код на PowerShell. Учитесь.

P.S. И, ради бога, переименуйте start.bat в какое-нибудь другое имя.

Отправлено: 15:12, 10-03-2017 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Исправить кодировку (Delphi 7) hmudblpx Программирование и базы данных 0 19-01-2014 23:47
VBS/WSH/JS - Отсекание части строки при вставке в таблицу Sql Server. VBS LilLoco Программирование и базы данных 0 20-11-2012 12:11
Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel RUVATA AutoIt 12 13-12-2010 23:22
Интернет - Как исправить сообщение верхней строки Internet Explorera serg_55 Microsoft Windows 2000/XP 2 03-11-2007 11:45




 
Переход