Показать полную графическую версию : Сортировка файлов по подстроке
Доброго времени суток,
нужна помощь в написании скрипта.
Ситуация такая:
в каталог на сервере (к примеру, 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 {
$dest = $_.matches[0].Value
$fpath = $_.Path -replace "\.xml"
Copy-Item -Path $_.Path -Destionation $dest
Copy-Item -Path $fpath -Destionation $dest -Recurse -Force
}
Спасибо большое, теперь все работает как нужно!
Но как я понимаю, структура xml нас не особо волнует, если мы будем обращаться к нему как к текстовому файлу и искать по подстроке. »
Это категорически неправильно!
Особенно в реализации 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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.