Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск файлов из списка (http://forum.oszone.net/showthread.php?t=192771)

Frenzy 01-12-2010 15:19 1555899

Поиск файлов из списка
 
Только недавно начал изучать powershell поэтому решаю задачи в силу своих знаний.

Подскажите как мне реализовать следующую задачу.

Есть файл CSV в котором есть названия файлов (по одному на каждую стоку) и эти файлы надо найти в куче подпапок.

Я вижу решение этой задачи следующим образом


Читаем содержимое файла | foreach-object { Ищем каждый объект в подпапках | копируем файлы в нужное место }

Начал делать и сразу же столкнулся с проблемой.

cat patch\file.csv | foreach (get-childitem d:\folder\ -include $_ -recurse)

Получаю ошибку

ForEach-Object : Не удается преобразовать "System.Object[ ]" в тип "System.Management.Automation.ScriptBlock", необходимый для параметра "Process". Specified method is not supported

Подскажите каким образом можно по конвееру передать строки из файла (если знаете уже готовые решения по такому вопросу - будит вообще замечательно)

Frenzy 01-12-2010 17:51 1555993

Разобрался надо было всего лишь поставить после foreach "- process"

Вот что получилось (содержимое файла ps1)

cat ..\compare.csv |
foreach -Process{get-childitem G:\CheckData\zakupka\ -include $_ -recurse |
foreach -process {copy-item $_ G:\CheckData\zakupka_2\}
}

1я строка - считываем информацию из файла
2я строка - ищим файлы в нужной папке (и подпапках)
3я строка - копируем эти файлы в нужную папку

*Есть минус - если находит более одного экземпляра файла - второй не будет копировать (и выдаст ошибку, что файл уже существует)

tarasov.evgeny 01-12-2010 18:21 1556015

Добрый день,

Frenzy, тоже недавно изучаю Powershell
Код:

$read = Get-Content .\test.csv
$conv = Out-String -InputObject $read -Stream
ForEach ($Str in $conv){
IF ( Get-ChildItem ".\$str" | Where-Object { $_.exists -eq "true"})
{Copy-Item -Path ".\$Str" -destination "C:\Documents...\PS\Destination"}
else {"Файла не существует"}}

Тоже не идеал...если файла не существует, то прерывается цикл...
Нужно бежать на электричку, завтра-после завтра посмотрю

Frenzy, может файл в новое место переименовывать?
староеимя_дата_время_копирования? - тогда точно будут разные файлы


Время: 07:54.

Время: 07:54.
© OSzone.net 2001-