Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл

Ответить
Настройки темы
CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл

Новый участник


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


Конфигурация

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


Здравствуйте. Возникла необходимость решить следующую задачу:

Во время установки ПО пишется лог, в txt файл с именем пользователя, в формате фамилия.ио, например ivanov.ai.txt. В этом файле, в случае успешной установки ПО, содержится строка, приблизительно такого содержания: "MSI (s) (70:64) [09:35:52:211]: Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена.". Все логи лежат в папке H:\Logs.
Нужно, чтобы скрипт записывал имя пользователя из названия его лог файла и строку об успешной установке в общий лог файл Log.txt, в эту же папку, в формате:

Файл Log.txt
Код: Выделить весь код
ivanov.ai -- MSI (s) (70:64) [09:35:52:211]: Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена.
Если такой строки нет, то достаточно просто имени пользователя.

Отправлено: 12:29, 04-07-2013

 

Аватара для sunnykey

Пользователь


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

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


Я задачу понял так. В папке H:\Logs лежит только два файла ivanov.ai.txt и Log.txt, нужно перечитать первый и добавить имя пользователя к каждой строке из это файла, поместив всё во второй файл.
Код: Выделить весь код
#Powershell script.
#Don't forget unlock script executing by 
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
$LogPath='D:\google_drive\log.txt'
filter AddUserName {$Env:USERNAME+" -- "+$_}
if ( -not (Test-Path -Path $LogPath)) {
    New-Item -ItemType File -Path $LogPath
}
Get-Content -Path "D:\google_drive\$Env:USERNAME.txt" | `
     AddUserName | `
     Out-File -FilePath $LogPath -Append

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 14:44, 04-07-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


sunnykey, немного не так. Надо добавить только к строке "MSI (s) (70:64) [09:35:52:211]: Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена.", если такая строка есть в файле ivanov.ai.txt и записать в Log.txt

Отправлено: 14:55, 04-07-2013 | #3

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


sunnykey,

Скорее там лежит неопределённое число файлов по маске
Фамилия.ИО.txt
и один файл Log.txt.

И надо перебирать все файлы первого типа, дописывая в новую строку Log.txt имя того файла, который проверяется, и результат из этого файла (т.е. дописывая в строку Log.txt с именем файла или найденную подстроку "..... Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена" или пустую подстроку если такой в файле нет).

-------
Mikhail Zhilin


Отправлено: 14:59, 04-07-2013 | #4


Новый участник


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

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


mwz, Да, Вы правы, именно так.

Отправлено: 15:16, 04-07-2013 | #5


Аватара для sunnykey

Пользователь


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

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


Цитата mwz:
sunnykey,
Скорее там лежит неопределённое число файлов по маске
Фамилия.ИО.txt
и один файл Log.txt.
И надо перебирать все файлы первого типа, дописывая в новую строку Log.txt имя того файла, который проверяется, и результат из этого файла (т.е. дописывая в строку Log.txt с именем файла или найденную подстроку "..... Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена" или пустую подстроку если такой в файле нет). »
Скрипт теперь перебирает все текстовые файлы, за исключением log.txt. Находит последнюю строку в файле равную Lotus Notes 8.5.3 ru -- Операция установки успешно завершена, добавляет имя из названия файла и записывает в log.txt. Если ни одна строка по шаблону не найдена, то пишет просто имя из файла. Надеюсь правильно.
Код: Выделить весь код
#Powershell script.
#Don't forget unlock script executing by 
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
$LogDir='D:\google_drive'
$LogPath="$LogDir\log.txt"

filter AddUserName ([string]$uname){
    if ($_ -ne $null) {
        $uname.TrimEnd(".txt")+" -- "+$_
    }
}

if ( -not (Test-Path -Path $LogPath)) {
    New-Item -ItemType File -Path $LogPath
}
Set-Location -Path $LogDir
$FileList=Get-ChildItem -Path ".\*" -Include "*.txt" -Exclude "log.txt" -File
foreach ($el in $FileList) {
    $CurStr=Get-Content -Path $el | Select-String -Pattern `
        "Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена." | `
        Select-Object -Last 1
        if ($CurStr -eq $null) {
            $CurStr=" "
        }
        $CurStr | AddUserName -uname $el.Name | Out-File -FilePath $LogPath -Append
}

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 16:49, 04-07-2013 | #6


Новый участник


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

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


sunnykey, хм, не хочет работать. В log.txt просто записывает «--» и всё. Вот что выдаёт в качестве ошибки:
Код: Выделить весь код
Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "File".
D:\log\Test.ps1:18 знак:78
+ $FileList=Get-ChildItem -Path ".\*" -Include "*.txt" -Exclude "log.txt" -File <<<< 
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingExc 
   eption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetC 
   hildItemCommand
 
Get-Content : Не удается привязать аргумента к параметру "Path", так как он имеет значен
ие NULL.
D:\log\Test.ps1:20 знак:30
+     $CurStr=Get-Content -Path <<<<  $el | Select-String -Pattern `
    + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidatio 
   nException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft. 
   PowerShell.Commands.GetContentCommand
Может быть, это я неправильно делаю? Просто до этого с PS дела не имел, может есть какие особенности?

Отправлено: 19:57, 04-07-2013 | #7


Аватара для sunnykey

Пользователь


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

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


Цитата Liquid Ocelot:
Может быть, это я неправильно делаю? Просто до этого с PS дела не имел, может есть какие особенности? »
Что у тебя присвоено переменной $LogDir?

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 00:33, 05-07-2013 | #8


Новый участник


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

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


sunnykey, D:\log

Отправлено: 00:46, 05-07-2013 | #9


Аватара для sunnykey

Пользователь


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

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


Цитата Liquid Ocelot:
sunnykey, D:\log »
Скорее всего у тебя PS 2.0, а там нет атрибута -File. Переделал
Код: Выделить весь код
#Powershell script.
#Don't forget unlock script executing by 
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
$LogDir='D:\google_drive'
$LogPath="$LogDir\log.txt"

filter AddUserName ([string]$uname){
    if ($_ -ne $null) {
        $uname.TrimEnd(".txt")+" -- "+$_
    }
}

if ( -not (Test-Path -Path $LogPath)) {
    New-Item -ItemType File -Path $LogPath
}
Set-Location -Path $LogDir
$FileList=Get-ChildItem -Path ".\*" -Include "*.txt" -Exclude "log.txt" | `
    where {$_.Attributes -ne [System.IO.FileAttributes]::Directory}
foreach ($el in $FileList) {
    $CurStr=Get-Content -Path $el | Select-String -Pattern `
        "Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена." | `
        Select-Object -Last 1
        if ($CurStr -eq $null) {
            $CurStr=" "
        }
        $CurStr | AddUserName -uname $el.Name | Out-File -FilePath $LogPath -Append
}

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:36, 05-07-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование первой строки из файла MultiMax Скриптовые языки администрирования Windows 27 08-03-2017 14:14
CMD/BAT - [решено] Копирование\перенос строк с 1.txt до определённой строки\секции в 2.txt. crimes Скриптовые языки администрирования Windows 7 11-06-2013 14:42
CMD/BAT - Копирование строк из одной файла в другой Kamerad Скриптовые языки администрирования Windows 3 28-01-2013 09:59
CMD/BAT - [решено] Выбрать достать ip из файла и вписать в другой файл bundick Скриптовые языки администрирования Windows 4 07-08-2012 07:44
CMD/BAT - [решено] Чтение определённой строки из txt hxygen Скриптовые языки администрирования Windows 10 16-11-2010 02:53




 
Переход