Код:

<#
.SYNOPSIS
Копирование или псевдоперемещение файлов и каталогов с сохранением структуры
.Description
Скрипт предназначен для копирования или перемещения файлов из одного каталога
в другой, при этом сохраняется вложенная структура каталогов. Фактически,
перемещение не выполняется, вместо него работает копирование с последующим
удалением скопированнных итемов.
.Parameter Source
Необязательный: Исходный каталог для выборки элементов. Указывается либо
относительный, либо абсолютный путь.
.Parameter Destination
Необязательный: Целевой каталог. Указывается либо относительный, либо
абсолютный путь.
.Parameter Include
Необязательный: маска(и) для включения файлов в выборку
.Parameter Exclude
Необязательный: маска(и) для исключения файлов из выборки
.Parameter Delete
Переключатель: Если указан, то будут удалены исходные файлы, включенные в выборку,
рекурсивно
.Parameter Emptydelete
Переключатель: Если указан, то будут удалены пустые подкаталоги в исходном каталоге,
рекурсивно
.Example
.\script.ps1 -sourc "D:\FOLDER1" -dest "d:\Folder2" -incl '*.pdf','*.txt' -excl '*_out.*' -del
Это пример перемещения файлов по маскам '*.pdf','*.txt' с исключением из выборки по маске
'*_out.*', с последующим удалением исходных элементов. Пустые каталоги не удаляются.
.Example
.\script.ps1
Это пример копирования/перемещения файлов/каталогов, с сохранением структуры, но
по указанным в самом скрипте параметрам...
.Notes
Created By YuS
Version: 1.00
#>
# requires v 3.0
param (
[string]
$source = ".\Folder1",
[string]
$destination = ".\Folder2",
[string[]]
$include = '*.*',
[string[]]
$exclude = '',
[switch]
$delete,
[switch]
$emptydelete
)
$src = gi -lit $source -force
# копирование файлов с сохранением структуры
dir -lit $src.fullname -inc $include -exc $exclude -rec -force|copy -d {
$d = split-path $_.fullname.replace("$($src.fullname)",$destination)
if (!(test-path -lit $d)){md $d -force} else {$d}
} -force #-whatif
if ($delete) {
# удаляем все скопированные файлы
dir -lit $src.fullname -inc $include -exc $exclude -rec -force -file|
del -force -rec
}
if ($emptydelete) {
# удаляем пустые каталоги
dir -lit $src.fullname -rec -dir -force|sort{$_.fullname.length} -des|%{
if((dir -lit $_.fullname -rec -force) -eq $null){
del -lit $_.fullname -force
}
}
}