Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Uragan66,
вообще, смотрите в сторону утилиты robocopy, у неё достаточно широкий функционал, в том числе и копирование со структурой...

Но если таки необходимо на powershell:
script.ps1
Код: Выделить весь код
<#
	.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
		}
	}
}

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:30, 21-01-2021 | #12