|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт vbs не могу настроить |
|
VBS/WSH/JS - [решено] Скрипт vbs не могу настроить
|
Новый участник Сообщения: 42 |
Форумчане, здравствуйте!
Подскажите, пожалуйста, что делаю не так. Сама задача: при появлении нового файла (в данном случае TOVAR.txt, по сути это обычный txt со структурой csv), необходимо запустить обработку, которая заменит часть значений в файле. Пытаюсь состряпать хоть что то, но вообще никуда не идёт, он просто висит в задачах, но не исполняется. Сам скрипт и файл, который появляется при загрузке. TOVAR.txt Option Explicit: Dim FDir, File, FSO, SINK FDir = Left(WSH.ScriptFullName, InStrRev(WSH.ScriptFullName, "\")) File = FDir & "\\server_kass\Obmen\Spr\temp_not_delete\TOVAR.txt" Set FSO = CreateObject("Scripting.FileSystemObject") Set SINK = WSH.CreateObject("WbemScripting.SWbemSink", "SINK_") GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")._ ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceCreationEvent" &_ " WITHIN 1 WHERE Targetinstance ISA 'CIM_DataFile' And" &_ " TargetInstance.Name='" & Replace(File, "\", "\\") & "'" Do: WSH.Sleep 8^10 :Loop Sub SINK_OnObjectReady(o,x) Dim ff, pp, ss, aa Set ff = FSO.CreateTextFile("\\server_kass\Obmen\Spr\temp_not_delete\TOVAR_2.txt", 1) Set pp = FSO.OpenTextFile(FDir & "TOVAR.txt") Do: ss = pp.ReadLine If Left(ss, 3) = "" Then aa = Split(ss, ";") If aa(59) = "2" Then aa(8) = aa(8) & " | КОНТРОЛЬ" aa(9) = Right("0" & Year(Date), 2) & "" &_ Right("0" & Month(Date), 2) & "" & Day(Year(Date), 3) End If End If ff.WriteLine ss Loop Until pp.AtEndOfStream: ff.Close: pp.Close FSO.DeleteFile File, 1 End Sub |
|
Отправлено: 09:41, 23-05-2022 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Опишите, что нужно заменить.
Также желательно знать имена заголовков в CSV, чтобы знать, где что менять. В Powershell работать с CSV не проблема, но гораздо удобнее, когда колонки названы по-человечески: Convertfrom-Csv (gc "C:\temp\TOVAR.txt" |select -Skip 4) -Delimiter ';' -Header (1..60) |select -First 5 |ft 1 2 3 4 5 6 7 8 - - - - - - - - 4603728127019 108983 1 00001 4603728127019 00022 5 дней от пота и запаха 1,5г №10 пак Посейдон ООО 4603728127019 109009 1 00001 4603728127019 00023 5 дней от пота и запаха 1,5г №10 пак Посейдон ООО 4602193010086 98785 1 00001 4602193010086 00079 9 месяцев Фолиевая кислота 0,4мг №30 таб.п.о Ва... 3800163710160 108635 1 00001 3800163710160 00001 Alenmak крем для рук с миндальным маслом питате... 8590232000050 94470 1 00001 8590232000050 00026 Colgate Классика здоровья з/щетка средняя Колге... |
------- Последний раз редактировалось DJ Mogarych, 23-05-2022 в 21:18. Отправлено: 20:59, 23-05-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Надо в столбце 24 заменить срок на текущий при наличии цифры "2" в поле 59. Причём там всё так хитро сделано, срок сделан не по-человечески 20250301
И всё, контроль слово отпало само по себе, оно лишнее. С поуэршелл я вообще не в ладах, я то vbs пытаюсь освоить методом ненаучного тыка. ![]() |
Отправлено: 07:26, 24-05-2022 | #3 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Powershell:
$path = "C:\temp\TOVAR.txt" # Если файл есть if (Test-Path "$path") { $t = get-date $bestBefore = $t.ToString("yyyyMMdd") $fileMark = $t.ToString("yyyyMMddhhmmss") # Импорт $csv = Convertfrom-Csv (gc "$path" |select -Skip 4) -Delimiter ';' -Header (1..60) # Замена по условию $csv |% { if ($_.59 -eq 2) { $_.24 = $bestBefore } } $inFile = Get-Item "$path" # Экспорт готового CSV $csv |Export-Csv -Path "$($inFile.DirectoryName)\$fileMark-$($inFile.BaseName).csv" -Delimiter ';' -NoTypeInformation -Encoding default # Если экспорт успешен, переименовать оригинал if ($?) {mv "$path" "$($inFile.DirectoryName)\$fileMark-$($inFile.Name)"} } |
------- Отправлено: 10:12, 24-05-2022 | #4 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Буду потитхонечку с ним разбираться)))
Спасибо)))) Попробую настроить всё таки экспорт в txt и заданную папку, и установить в заданиях постоянную работу, где то читал, что такое можно осуществить, он будет висеть и ожидать появления нового файла. |
|
Отправлено: 11:06, 24-05-2022 | #5 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать В задании это делать не нужно, т. к. есть планировщик задач, который может запускать скрипт хоть каждую минуту. Это надёжнее, чем висящий процесс.
Для txt можно просто поменять расширение на .txt в строке экспорта. |
------- Отправлено: 11:09, 24-05-2022 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Можно ли переписать этот vbs скрипт в бат скрипт | ufooo000 | Скриптовые языки администрирования Windows | 1 | 07-02-2017 08:52 | |
CMD/BAT - [решено] Можно ли этот (.vbs) скрипт интегрировать в (.bat) скрипт? | ufooo000 | Скриптовые языки администрирования Windows | 6 | 01-01-2017 10:23 | |
VBS/WSH/JS - Не корректно работает VBS-скрипт | NoBrain | Скриптовые языки администрирования Windows | 3 | 11-02-2014 16:05 | |
VBS/WSH/JS - Скрипт VBS не работает в Win7 x64 | BigBoo | Скриптовые языки администрирования Windows | 1 | 19-09-2012 13:37 |
|