исправить кодировку при вставке строки
всем привет.
друзья, есть файл (см вложение) в кодировке 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
)
после того, как строка добавляется, она не читается. как исправить ситуацию?
|
Нет вложения.
Цитата:
Цитата chek
после того, как строка добавляется, она не читается. как исправить ситуацию? »
|
Не использовать пакетные файлы. Использовать WSH/PoSH.
UTF-16.
|
Вот примерная болванка на 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
|
Вложений: 1
добавил файл.
хотелось бы с помощью батника, т.к. будет распространятся с помощью ГП и добавится в уже существующий start.bat.
|
написал на поше
Код:
$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"
}
результат тот же - вставляет иероглифы.
|
если 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 написал не устраивает, он же есть в системе, ничего устанавливать не нужно.
|
Цитата:
Цитата chek
хотелось бы с помощью батника, »
|
chek, «батники» пакетные файлы очень ограниченно работают с юникодом.
Цитата:
Цитата chek
хотелось бы с помощью батника, т.к. будет распространятся с помощью ГП и добавится в уже существующий start.bat. »
|
Групповой политике глубоко наплевать, будет ли там пакетный файл, скрипт WSH или скрипт PoSH. Или даже несколько. Или вперемешку.
Кого «осенила» «светлая» идея дать пакетному файлу имя одной из внутренних команд командного процессора?! :lol:
Цитата:
Цитата 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
}
|
Цитата:
Цитата 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 написал не устраивает »
|
к сожалению у меня совсем нет познаний в этом языке, а хочется не только получить результат, но и научиться.
|
Цитата:
Цитата chek
а хочется не только получить результат, но и научиться. »
|
chek, перед Вашим последним сообщением — код на PowerShell. Учитесь.
P.S. И, ради бога, переименуйте start.bat в какое-нибудь другое имя.
|
Время: 21:41.
© OSzone.net 2001-