![]() |
Поиск с созданием списка файлов с последующим их копированием.
Доброго времени суток.
Есть много групп файлов в разных папках. Группа состоит из файлов с расширениями 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, но сам справиться не могу. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
jpg- фото с камеры txt- состояние клапанов и вентилей в текстовом формате Код:
sensor ........1-18 Код:
<?xml version="1.0" encoding="windows-1251"?> Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Внезапно выяснилось, что кроме «меньше пятидесяти» и «больше пятидесяти»:
Цитата:
Вот Вам примерная болванка: Код:
$sSourceFolder = 'C:\Мои проекты\0162' |
Цитата:
Тут вылезла другая проблема. Я про нее совершенно забыл. Файлы лежат в подпапках структуры типа год\месяц\число. И надо делать рекурсивный поиск. |
Цитата:
Цитата:
|
Разобрался, заработало. В объявлении переменной пути надо было слеш добавить в конце. Проглядел.
Все копирует, но вылезает ошибка Copy-Item : Не удается скопировать элемент E:\nucmonarchive\Alert\d530f6c2d0a9b319809e8c022b69bccf.xml в самого себя. И далее на остальные два файла. |
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 |
Цитата:
Код:
… -ge 50) Цитата:
Цитата:
Код:
Get-ChildItem -Path "$sSourceFolder\*.xml" -Recurse Цитата:
Продумайте ещё раз алгоритм работы. И прежде всего — где, что и куда. |
Код:
$src = 'd:\TEMP\test' # корневой каталог для сканирования -whatif - удалить в боевом режиме |
Благодарю за помощь, разнес каталоги. Все работает.
|
Время: 10:28. |
Время: 10:28.
© OSzone.net 2001-