|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Добавление строк в файле формата .txt |
|
|
VBS/WSH/JS - [решено] Добавление строк в файле формата .txt
|
Пользователь Сообщения: 50 |
Профиль | Отправить PM | Цитировать Здравствуйте, уважаемые форумчане OSZone.net. Нужна помощь, а именно:
В файле, например, "assets.txt" нужно добавить строки("/G-65", "Mercedes-Benz G65 AMG" и т.д.) + чтобы каждая строчка была с новой строки и, если уже данная строка в файле присутствует, то ничего не предпринимать. Возможно ли это сделать через .vbs файл? Вот, что у меня получилось, но это не то. Чайник.vbs
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)
/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 Ремонтные части |
|
Отправлено: 12:10, 24-05-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать TheLeon, файл желательно упаковывать в архив и прикладывать к сообщению. Вообще же здесь понадобится два файла — файл до добавления и файл после добавления, чтобы можно было понять, что именно требуется.
|
Отправлено: 12:29, 24-05-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:20, 24-05-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать TheLeon, у Вас действительно файлы в Юникоде UTF-16LE без BOM?
|
Отправлено: 14:32, 24-05-2018 | #4 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Iska, вроде да.
|
|
Отправлено: 14:49, 24-05-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 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 } |
Отправлено: 16:10, 24-05-2018 | #6 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Iska, у меня проблема с PowerShell'ом, т.к. по-умолчанию в Shindows выполнение скриптов на PowerShell выключено.. А также не знаю, включена ли возможность выполнение скриптов у других пользователей, которые будут использовать установщик. Опять же, хотель, чтобы скрипт был на VBS, но не понимаю, как это реализовать.
|
Последний раз редактировалось TheLeon, 25-05-2018 в 09:06. Отправлено: 08:59, 25-05-2018 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Iska, после завершения установки выходит такое окно(скриншот №1 ниже), можно ли это окно скрыть? Строчки добавляются, но между ними такая ерунда (скриншот №2 ниже), т.е. всё, что было на русском - превратилось в непонятные символы.
Скриншот №1
Скриншот №2
|
Отправлено: 11:33, 25-05-2018 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата TheLeon:
WScript.Echo "Strings [" & objRegExp.Pattern & "] append to source file [" & strSourceFile & "]." Цитата TheLeon:
Вы случайно скрипт не в UTF-8 сохраняете, а? |
||
Отправлено: 11:52, 25-05-2018 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Замена строк в файле формата .xml | TheLeon | Скриптовые языки администрирования Windows | 14 | 17-05-2018 19:47 | |
CMD/BAT - Поиск строк и добавление к ним цифр в файле | mountainspeak | Скриптовые языки администрирования Windows | 1 | 09-11-2016 13:34 | |
CMD/BAT - [решено] Поиск, удаление, замена и добавление строк в текстового файле. Что возможно? | akrav | Скриптовые языки администрирования Windows | 8 | 06-12-2015 13:22 | |
CMD/BAT - Подсчет количества одинаковых строк в txt файле | lexis1980 | Скриптовые языки администрирования Windows | 1 | 19-11-2013 11:46 | |
CMD/BAT - Замена и добавление числа в txt файле | Tsok | Скриптовые языки администрирования Windows | 0 | 17-10-2011 17:22 |
|