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

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

Ветеран


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

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


TheLeon, с WSH есть проблема: там в принципе отсутствует прямая поддержка записи файлов в кодировке UTF-16LE без BOM — в том смысле, что BOM пишется всегда.

Ну, давайте попробуем обходным путём:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const ForReading   =  1
Const TristateTrue = -1

Const adTypeBinary = 1
Const adTypeText   = 2

Const adModeReadWrite = 3

Const adSaveCreateOverWrite = 2


Dim strSourceFile
Dim objRegExp

Dim strContent

Dim objStreamBinary


strSourceFile = "C:\Мои проекты\0160\assets_old assets_new\assets_old.txt"

Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
	.Pattern    = "/G-65\r\nMercedes-Benz G65 AMG\r\n"
	.Multiline  = True
	.IgnoreCase = True
End With

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FileExists(strSourceFile) Then
		With .OpenTextFile(strSourceFile, ForReading, False, TristateTrue)
			strContent = .ReadAll()
			.Close
		End With
	Else
		WScript.Echo "Can't find source file [" & strSourceFile & "]."
		WScript.Quit 1
	End If
End With

If Not objRegExp.Test(strContent) Then
	strContent = strContent & vbCrLf & Replace(objRegExp.Pattern, "\r\n", vbCrLf)
	
	Set objStreamBinary = WScript.CreateObject("ADODB.Stream")
	
	With objStreamBinary
		.Type     = adTypeBinary
		.Mode     = adModeReadWrite
		.Open
	End With
	
	With WScript.CreateObject("ADODB.Stream")
		.Type     = adTypeText
		.Mode     = adModeReadWrite
		.Charset  = "unicode"
		.Open
		.WriteText strContent
		.Position = 2           ' Skip BOM
		.CopyTo objStreamBinary ' Strips BOM (first 2 bytes)
		.Close
	End With
	
	With objStreamBinary
		.SaveToFile strSourceFile, adSaveCreateOverWrite
		.Close
	End With
	
	Set objStreamBinary = Nothing
	
	WScript.Echo "Strings [" & objRegExp.Pattern & "] append to source file [" & strSourceFile & "]."
Else
	WScript.Echo "Strings [" & objRegExp.Pattern & "] already presents in source file [" & strSourceFile & "]."
End If

Set objRegExp = Nothing

WScript.Quit 0

Теперь символы конца строки — «\r\n». Не забывайте экранировать в шаблоне спецсимволы, иначе ни искаться, ни добавляться толком не будет. И путь к исходному файлу, и шаблон заданы тупо в коде.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:22, 25-05-2018 | #8