|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл |
|
|
CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл
|
Новый участник Сообщения: 22 |
Профиль | Отправить 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 Если такой строки нет, то достаточно просто имени пользователя. |
|
Отправлено: 12:29, 04-07-2013 |
Пользователь Сообщения: 124
|
Профиль | Отправить 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 |
------- Отправлено: 14:44, 04-07-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 22
|
Профиль | Отправить 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 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать sunnykey,
Скорее там лежит неопределённое число файлов по маске Фамилия.ИО.txt и один файл Log.txt. И надо перебирать все файлы первого типа, дописывая в новую строку Log.txt имя того файла, который проверяется, и результат из этого файла (т.е. дописывая в строку Log.txt с именем файла или найденную подстроку "..... Продукт: Lotus Notes 8.5.3 ru -- Операция установки успешно завершена" или пустую подстроку если такой в файле нет). |
------- Отправлено: 14:59, 04-07-2013 | #4 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать mwz, Да, Вы правы, именно так.
|
|
Отправлено: 15:16, 04-07-2013 | #5 |
Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата mwz:
#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 } |
|
------- Отправлено: 16:49, 04-07-2013 | #6 |
Новый участник Сообщения: 22
|
Профиль | Отправить 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 |
Отправлено: 19:57, 04-07-2013 | #7 |
Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата Liquid Ocelot:
|
|
------- Отправлено: 00:33, 05-07-2013 | #8 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать sunnykey, D:\log
|
Отправлено: 00:46, 05-07-2013 | #9 |
Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата Liquid Ocelot:
#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 } |
|
------- Отправлено: 03:36, 05-07-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|