![]() |
Сортировка файлов по подстроке
Доброго времени суток,
нужна помощь в написании скрипта. Ситуация такая: в каталог на сервере (к примеру, c:\obmen) выгружаются службой документы в формате: имя_файла.xml + папка с таким же именем и с вложениями. В файле имя_файла.xml есть строка с адресом (например, <Address=Иванов>). Нужно написать скрипт, который обходил бы все файлы .xml текущего каталога, искал в них строку с адресом (Иванов, Петров и др. - адрес уникален, количество и имена адресов известны) и, в зависимости от этой строки, перекладывал бы документ (.xml+одноименную папку с вложениями) в нужные подкаталоги (например, c:\obmen\Иванов, c:\obmen\Петров). Заранее благодарю за оказанную помощь. |
Пример xml файла можете выложить?
|
К сожалению, выложить xml не могу, в них персональные данные и информация по работе компании.
Но как я понимаю, структура xml нас не особо волнует, если мы будем обращаться к нему как к текстовому файлу и искать по подстроке. Здесь можно даже немного упростить задачу: Найти и переместить все документы (xml + папка с вложениями), где в файле xml встречается слово "Иванов", затем сделать тоже действие с "Петровым" и тд, все остальные (хотя таких не будет) остаются в корневой папке для ручной обработки. |
Select-String -path *.xml -Pattern "Иванов|Петров" | copy -Destination {$_.matches[0].Value}
|
Спасибо, работает!
Копирует xml файлы; а как добавить копирование одноименных папок вместе с xml? |
copy Иванов,Петров C:\Folder -force -rec
|
ммм, немного не то...
выгрузка идет в таком формате: конфигурационный файл "2bf84f4b-1ac6-4541-aad9-73135f58e9df.xml" + папка одноименная "2bf84f4b-1ac6-4541-aad9-73135f58e9df" с вложениями с копированием .xml Вы мне уже помогли, а вот как вместе с ним одновременно и папку копировать? |
Код:
Select-String -path *.xml -Pattern "Иванов|Петров" | Foreach { |
Спасибо большое, теперь все работает как нужно!
|
Цитата:
Особенно в реализации Kazun'а - потому что в папку Иванова попадут обладатели отчеств Иванович, Ивановна и носители фамилий Ивановский и т.п. |
Busla, ну, коллега Kazun тут в общем-то, не при чём — что заказывали, таково было пожелание автора.
|
Всем еще раз привет,
хотелось бы домучить этот алгоритм до конца: проблем с неоднозначной интерпретацией искомого слова не будет (там идут сложные ID, которые не будут пересекаться, Иванов, Петров - это для общего понимания) но столкнулся с еще одной бедой: файлы и папки нужно было перемещать, а не копировать. думал, что можно просто сменить оператор copy на move и будет все отлично, но PS выдал ошибку. что тут нужно изменить для того, чтобы файлы (и папки) перемещались, а не копировались? примерно в таком виде это сейчас: cd C:\obmen Select-String -path *.xml -Pattern "Иванов|Петров|Сидоров" | Foreach { $dest = $_.matches[0].Value $fpath = $_.Path -replace "\.env" copy-item -Path $_.Path $dest Copy-Item -Path $fpath $dest -Recurse -Force } |
Добавить команду Remove-Item $_.Path и Remove-Item $fpath -Force -Recurse
|
Время: 18:23. |
Время: 18:23.
© OSzone.net 2001-