![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Поиск с созданием списка файлов с последующим их копированием. |
|
|
PowerShell - Поиск с созданием списка файлов с последующим их копированием.
|
Новый участник Сообщения: 7 |
Доброго времени суток.
Есть много групп файлов в разных папках. Группа состоит из файлов с расширениями jpg, txt, xml. В xml файле есть параметр, по которому файлы надо сортировать в отдельную папку - "<ttemp>nn". "nn" - целое число, если оно меньше 50, файл не трогаем, если больше, копируем его в папку "alert". На данный момент все решено следующей связкой: Multiple search and replace - В поиске задаем (\<ttemp\>)([1-9]\d{2,}|[4-9][9-9]), сохраняем результаты в файл result.txt, соответственно в списке только xml файлы с полным путем Далее в Notepad ++ ищем по файлу "^(.*)(\.xml)" и заменяем на "\1(\.jpg)\r\1(\.txt)\r\1(\.xml)", получаем список всех нужных файлов Далее запускаем скрипт на PS, который уже эти файлы копирует в нужную папку. $read = Get-Content .\result.txt $conv = Out-String -InputObject $read -Stream ForEach ($Str in $conv){ IF ( Get-ChildItem "$str" | Where-Object { $_.exists -eq "true"}) {Copy-Item "$Str" -destination "H:\alert\"} else {"Файла не существует"}} Собственно понимаю, что можно первые два шага тоже перенести в PowerShell, но сам справиться не могу. |
|
Отправлено: 23:38, 28-05-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата rengaboy:
Цитата rengaboy:
Цитата rengaboy:
Цитата rengaboy:
|
||||
Отправлено: 23:57, 28-05-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
jpg- фото с камеры txt- состояние клапанов и вентилей в текстовом формате sensor ........1-18 sensor ........2-50 sensor ........3-28 bleeder .......1-0 bleeder .......2-0 valve ..........1-0 valve ..........2-1 <?xml version="1.0" encoding="windows-1251"?> <report> <info> <nImagePresent>1</nImagePresent> <nSize>.......</nSize> <nImageWidth>....</nImageWidth> <nImageHeight>....</nImageHeight> <tChannel>....</tChannel> <tTemp>50</tTemp> <tSensorName>...........</tSensorName> <tLocationCode>..............</tLocationCode> <tLatitude>...............</tLatitude> <tLongitude>.............</tLongitude> <nDatetime>..............</nDatetime> <nTZOffset>+3.00</nTZOffset> Цитата Iska:
Цитата Iska:
|
||||
Последний раз редактировалось rengaboy, 29-05-2018 в 01:03. Отправлено: 00:41, 29-05-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата rengaboy:
Цитата rengaboy:
|
||
Отправлено: 01:19, 29-05-2018 | #4 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
|||
Отправлено: 01:29, 29-05-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Внезапно выяснилось, что кроме «меньше пятидесяти» и «больше пятидесяти»:
Цитата rengaboy:
Вот Вам примерная болванка: $sSourceFolder = 'C:\Мои проекты\0162'
if(Test-Path -Path $sSourceFolder -PathType Container) {
Get-ChildItem -Path "$sSourceFolder\*.xml" | ForEach-Object -Process {
if(([xml](Get-Content -Path $_.FullName -Encoding Ascii)).report.info.tTemp -gt 50) {
$oFolder = New-Item -Path ".\Alert" -ItemType Directory -ErrorAction SilentlyContinue
Copy-Item -Path $_.FullName, ($_.FullName -replace ".xml$", ".jpg"), ($_.FullName -replace ".xml$", ".txt") -Destination ".\Alert"
}
}
} else {
Write-Host "Can't find source folder [$sSourceFolder]." -ForegroundColor Red
}
|
|
Отправлено: 02:34, 29-05-2018 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Тут вылезла другая проблема. Я про нее совершенно забыл. Файлы лежат в подпапках структуры типа год\месяц\число. И надо делать рекурсивный поиск. |
|
Отправлено: 11:13, 29-05-2018 | #7 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата rengaboy:
Цитата rengaboy:
|
||
Отправлено: 11:42, 29-05-2018 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Разобрался, заработало. В объявлении переменной пути надо было слеш добавить в конце. Проглядел.
Все копирует, но вылезает ошибка Copy-Item : Не удается скопировать элемент E:\nucmonarchive\Alert\d530f6c2d0a9b319809e8c022b69bccf.xml в самого себя. И далее на остальные два файла. |
Отправлено: 12:38, 29-05-2018 | #9 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать rengaboy, дело не в слэше, а в относительных путях. Ошибка вылезает, видимо потому, что Alert рядом с рабочими логами лежит.
однострок: Get-ChildItem -Path E:\nucmonarchive -Filter *.xml -Recurse | Where-Object { [int](Select-Xml -Path $_.FullName -XPath "/report/info/tTemp").Node.'#text' -lt 50 } | Select-Object -ExpandProperty FullName | ForEach-Object { foreach($ext in @('.jpg', '.txt', '.xml')) { $_.Remove($_.Length-4)+$ext } } | Copy-Item -Destination E:\Alert |
Отправлено: 13:06, 29-05-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Нужен батник (архивация самого свежего файла с последующим копированием) | shade_art | Скриптовые языки администрирования Windows | 4 | 16-09-2016 20:07 | |
Медиа - Мистическая ситуация с копированием аудио файлов в mp3 и неотображением их там | Yura-A | Microsoft Windows 7 | 6 | 25-02-2016 08:10 | |
CMD/BAT - Поиск цифр в текстовом файле и последующий их поиск в названии файлов массива (лог.) | antares_80@vk | Скриптовые языки администрирования Windows | 10 | 25-10-2015 11:34 | |
Любой язык - Сравнение списка файлов и каталога с файлами с копированием файлов из каталога | jastreb83 | Скриптовые языки администрирования Windows | 0 | 10-04-2013 09:56 | |
CMD/BAT - [решено] Выбор файлов из списка с последующим копированием и переносом в другую папку | yaoleg2 | Скриптовые языки администрирования Windows | 10 | 04-11-2011 01:28 |
|