Contents of this directory is archived and no longer updated.

На ньюсгруппах недавно попросили скрипт с использованием PowerShell, который бы рекурсивно определённую папку на предмет содержания определённых файлов и копировал эти файлы в другую папку. Причём файлы копироваться должны вместе с деревом папок, относительно корня. Корень в данном случае является папка, откуда начинается рекурсивный поиск. Действительно, такие задачи встречаются, поэтому мой вариант кому-то может оказаться полезным.

$RootPoint = "D:\Users\Shared Documents"
$dest = 'E:\DestFolder'
$rep = $RootPoint.Replace("\","\\")
dir $RootPoint -Include *.msi -Recurse | %{
    $suf = $_.directory.tostring() -replace $rep
    New-Item -itemtype d -path $($dest + $suf) -force -ea 0
    copy $_ $("$dest" + "$suf")
}

Этот скрипт будет искать все MSI файлы в папке D:\Users\Shared Documents и подпапках. Если файл будет найден, то он будет скопирован в E:\SomeFolder с повторением структуры папок. Для начала я заэскейпил слеши в исходной папке. И в цикле уже отрезаю путь до корня обычным оператором –replace. После чего хвост пристыковываю к пути назначения, чтобы получить новую структуру папок и создаю нужные папки в месте назначения. И последней строкой копирую сам файл в уже подготовленную папку.

Решений для этой задачи на самом деле очень много и я постарался сделать наиболее простой вариант, для разминки мозгов, так сказать :)


Share this article:

Comments:

Comments are closed.