VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Аватара пользователя
TheLeon

VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение TheLeon »

Здравствуйте, уважаемые форумчане OSZone.net. Нужна помощь, а именно:

В файле, например, "assets.txt" нужно добавить строки("/G-65", "Mercedes-Benz G65 AMG" и т.д.) + чтобы каждая строчка была с новой строки и, если уже данная строка в файле присутствует, то ничего не предпринимать. Возможно ли это сделать через .vbs файл? Вот, что у меня получилось, но это не то.





Чайник.vbs

[spoiler]Код:
[/spoiler]

Код: Выделить всё

Option Explicit
Dim oFSO, oTS, sFileText
Dim sDataToAdd, sBuff
Const vbForReading = 1
Const vbForWriting = 2
sDataToAdd = "/G-65" & vbCrLf & _
			 "Mercedes-Benz G65 AMG" & vbCrLf
If WScript.Arguments.Count = 0 Then
	MsgBox "Необходимо передать файл в параметре", vbExclamation
	WScript.Quit 1
End If
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oTS = oFSO.OpenTextFile(WScript.Arguments(0), vbForReading)
sFileText = oTS.ReadAll
oTS.Close
If Len(sFileText) >= Len(sDataToAdd) Then
	sBuff = Right(sFileText, Len(sDataToAdd))
	If LCase(sBuff) = LCase(sDataToAdd) Then
		MsgBox "Данные уже были добавлены", vbInformation
		WScript.Quit 2
	End If
End If
sFileText = sFileText & sDataToAdd
Set oTS = oFSO.OpenTextFile(WScript.Arguments(0), vbForWriting)
oTS.Write(sFileText)
oTS.Close
Set oTS = Nothing
Set oFSO = Nothing
WScript.Quit 0









Сам файл (assets.txt)

[spoiler]/gaz66

Модель B-66



/gaz_backup_wheel

Зап. колесо



/gaz_utility

Ремонтные части



/kamaz6520

Модель C-6520



/kamaz6522

Модель C-6522



/kirovets700

Модель K-700



/kirovets_grabber

Приспособа



/kirovets_protector

Защита кабины



/kraz255

Модель C-255



/kraz_backup_wheel

Зап. колесо



/kraz_carriage

Бортовая платформа



/kraz_cart

Платформа лесовоза



/kraz_cart_crane

Автономн. лес. кран



/kraz_cistern

Топливная цистерна



/kraz_markers

Маячки



/kraz_protector

Защита кабины



/kraz_roofpack

Зап. колесо



/kraz_tent

Гаражные части



/kraz_tractor

Сцепка



/kraz_utility

Ремонтные части



/load_logs_long

Длинные бревна



/load_logs_medium

Средние бревна



/load_logs_medium_wide

Средние бревна



/load_logs_short

Короткие бревна



/load_logs_short_short

Короткие бревна



/load_logs_short_crane

Короткие бревна



/load_logs_short_trailer

Короткие бревна



/maz535

Модель D-535



/maz7310

Модель E-7310



/maz_big_cart

Платформа лесовоза



/maz_big_tractor

Сцепка



/maz_big_utility

Ремонтные части



/maz_tractor

Сцепка



/trailer_cart

Прицеп-роспуск



/trailer_cistern

Полуприцеп-цистерна



/trailer_kraz_cart

Удлиненный роспуск



/trailer_short_cart

Бортовой прицеп



/trailer_tent

Полуприцеп-фургон



/trailer_tent_cart

Тележка-фургон



/trailer_utility

Борт. полуприцеп



/trailer_utility_cart

Сервисная тележка



/trailer_gaz

Гаражная тележка



/uaz469

Модель A-469



/uaz_bumper

Силовой бампер



/uaz_illumination

Маячки



/uaz_snorkel

Шноркель



/uaz_trunk

Ремонтные части



/ural4320

Модель C-4320



/ural_backup_wheel

Зап. колесо



/ural_cart

Платформа с краном



/ural_crane_support

Опора для крана



/ural_exhaust

Пожаробезопасный выхлоп



/zil130

Модель B-130



/zil_carriage

Бортовая платформа



/zil_utility

Ремонтные части[/spoiler]
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение Iska »

TheLeon, файл желательно упаковывать в архив и прикладывать к сообщению. Вообще же здесь понадобится два файла — файл до добавления и файл после добавления, чтобы можно было понять, что именно требуется.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение Iska »

TheLeon, у Вас действительно файлы в Юникоде UTF-16LE без BOM?
Вложения
assets_old assets_new.zip
(1.93 КБ) 0 скачиваний
assets_old assets_new.zip
(1.93 КБ) 0 скачиваний
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение Iska »

TheLeon, тогда я спрошу Вас так — как Вы относитесь к PowerShell?

Код:

Код: Выделить всё

$sSourceFile   = 'C:\Мои проекты\0160\assets_old assets_new\assets_old.txt'
$sStrings4Find = "/G-65`r`nMercedes-Benz G65 AMG`r`n"
if(Test-Path -Path $sSourceFile -PathType Leaf) {
    $oUnicodeEncodingWithoutBOM = New-Object -TypeName 'System.Text.UnicodeEncoding' -ArgumentList $false, $false
    $sContent = [System.IO.File]::ReadAllText($sSourceFile, $oUnicodeEncodingWithoutBOM)
    if($sContent –notmatch $sStrings4Find) {
        $sContent += "`r`n$sStrings4Find"
        [System.IO.File]::WriteAllText($sSourceFile, $sContent, $oUnicodeEncodingWithoutBOM)
        Write-Host "Strings ["                                         -ForegroundColor Green  -NoNewline
        Write-Host $sStrings4Find                                      -ForegroundColor Yellow -NoNewline
        Write-Host "] append to source file ["                         -ForegroundColor Green  -NoNewline
        Write-Host $sSourceFile                                        -ForegroundColor Yellow -NoNewline
        Write-Host "]."                                                -ForegroundColor Green
    } else {
        Write-Host "Strings ["                                         -ForegroundColor Green  -NoNewline
        Write-Host $sStrings4Find                                      -ForegroundColor Yellow -NoNewline
        Write-Host "] already presents in source file ["               -ForegroundColor Green  -NoNewline
        Write-Host $sSourceFile                                        -ForegroundColor Yellow -NoNewline
        Write-Host "]."                                                -ForegroundColor Green
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}

«`r`n» — это конец строки 0x0D, 0x0A, он же CrLf.
Аватара пользователя
TheLeon

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение TheLeon »

Iska, у меня проблема с PowerShell'ом, т.к. по-умолчанию в Shindows выполнение скриптов на PowerShell выключено.. А также не знаю, включена ли возможность выполнение скриптов у других пользователей, которые будут использовать установщик. Опять же, хотель, чтобы скрипт был на VBS, но не понимаю, как это реализовать.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение Iska »

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



Ну, давайте попробуем обходным путём:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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». Не забывайте экранировать в шаблоне спецсимволы, иначе ни искаться, ни добавляться толком не будет. И путь к исходному файлу, и шаблон заданы тупо в коде.
Аватара пользователя
TheLeon

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение TheLeon »

Iska, после завершения установки выходит такое окно(скриншот №1 ниже), можно ли это окно скрыть? Строчки добавляются, но между ними такая ерунда (скриншот №2 ниже), т.е. всё, что было на русском - превратилось в непонятные символы.





Скриншот №1

[spoiler]Изображение[/spoiler]






Скриншот №2

[spoiler]Изображение[/spoiler]
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Добавление строк в файле формата .txt

Сообщение Iska »

Цитата TheLeon:



Iska, после завершения установки выходит такое окно(скриншот №1 ниже), можно ли это окно скрыть?
VBS/WSH/JS - [решено] Добавление строк в файле формата .txt




Закомментируйте строку:



Код:

Код: Выделить всё

WScript.Echo "Strings [" & objRegExp.Pattern & "] append to source file [" & strSourceFile & "]."


Цитата TheLeon:



Строчки добавляются, но между ними такая ерунда (скриншот №2 ниже), т.е. всё, что было на русском - превратилось в непонятные символы.
VBS/WSH/JS - [решено] Добавление строк в файле формата .txt




Это не между ними, это то, что Вы добавляете. Если происходит, как Вы пишете, такая ерунда — делайте следующее: упаковываете в архив Ваш исходный файл — именно тот, с которым Вы работаете, упаковываете Ваш файл скрипта .vbs, и прикладываете архив к сообщению.



Вы случайно скрипт не в UTF-8 сохраняете, а?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»