VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Ответить
Аватара пользователя
Technik_spat

VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение Technik_spat »

Форумчане, здравствуйте!

Подскажите, пожалуйста, что делаю не так.

Сама задача: при появлении нового файла (в данном случае TOVAR.txt, по сути это обычный txt со структурой csv), необходимо запустить обработку, которая заменит часть значений в файле.

Пытаюсь состряпать хоть что то, но вообще никуда не идёт, он просто висит в задачах, но не исполняется.

Сам скрипт и файл, который появляется при загрузке.

Файл 166667




Код:

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

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
Аватара пользователя
DJ Mogarych

Re: VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение DJ Mogarych »

Опишите, что нужно заменить.

Также желательно знать имена заголовков в 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 Классика здоровья з/щетка средняя Колге...
Аватара пользователя
Technik_spat

Re: VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение Technik_spat »

Надо в столбце 24 заменить срок на текущий при наличии цифры "2" в поле 59. Причём там всё так хитро сделано, срок сделан не по-человечески 20250301

И всё, контроль слово отпало само по себе, оно лишнее.

С поуэршелл я вообще не в ладах, я то vbs пытаюсь освоить методом ненаучного тыка. Изображение
Аватара пользователя
DJ Mogarych

Re: VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение DJ Mogarych »

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)"}
}
Аватара пользователя
Technik_spat

Re: VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение Technik_spat »

Буду потитхонечку с ним разбираться)))

Спасибо))))

Попробую настроить всё таки экспорт в txt и заданную папку, и установить в заданиях постоянную работу, где то читал, что такое можно осуществить, он будет висеть и ожидать появления нового файла.
Аватара пользователя
DJ Mogarych

Re: VBS/WSH/JS - [решено] Скрипт vbs не могу настроить

Сообщение DJ Mogarych »

В задании это делать не нужно, т. к. есть планировщик задач, который может запускать скрипт хоть каждую минуту. Это надёжнее, чем висящий процесс.



Для txt можно просто поменять расширение на .txt в строке экспорта.
Ответить

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