PowerShell - Копирование файла с полной структурой директорий

Ответить
 • Просмотры: 1
Аватара пользователя
Iska

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Iska »

Цитата greg zakharov:



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




greg zakharov, спасибо! Совет в копилку, пригодится на будущее... Но в данной задаче с плеером немного не подходит. Пользователи Simple Player часто делятся скриптами и бывает кому-то нужен именно старый скрипт. А их принято выкладывать в полной структуре папок. Да и самому может нужно будет что-то подправить в старом скрипте при его откате.
Цитата Iska:



Попробуйте так
PowerShell - Копирование файла с полной структурой директорий




Iska, спасибо большое! Этот код работает, файл копируется в нужную директорию.
Аватара пользователя
YuS_2

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение YuS_2 »

Uragan66,

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



Но если таки необходимо на powershell:



script.ps1

[spoiler]

Код: Выделить всё

<#
	.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
		}
	}
}
[/spoiler]
Аватара пользователя
greg zakharov

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение greg zakharov »

Цитата Uragan66:



Пользователи Simple Player часто делятся скриптами и бывает кому-то нужен именно старый скрипт. А их принято выкладывать в полной структуре папок.



Вы слышали про такую штуку, как виртуальная катологизация?
Аватара пользователя
Uragan66

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

Цитата YuS_2:



Но если таки необходимо на powershell
PowerShell - Копирование файла с полной структурой директорий




YuS_2, спасибо! Скрипт хороший. Но для моей задачи не совсем подходит, мне нужно копировать конкретный файл/файлы, не затрагивая при этом другие файлы с таким же расширением, а в Вашем скрипте копирование идёт по маске.


Цитата greg zakharov:



Вы слышали про такую штуку, как виртуальная катологизация?
PowerShell - Копирование файла с полной структурой директорий




честно говоря, только в общих чертах. Но, думаю, это не совсем подойдёт... Если подойдёт мне, то может не подойти другим пользователям плеера. Скрипты то для этого и выкладываются в полной структуре папок, что большинство пользователей не знает куда их ложить, многие и не хотят узнавать, увы... А уж с виртуальной катологизацией то точно никто не захочет разбираться и вникать в это, к сожалению.
Аватара пользователя
YuS_2

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение YuS_2 »

Цитата Uragan66:



копирование идёт по маске.
PowerShell - Копирование файла с полной структурой директорий




полное имя файла с расширением, тоже может быть маской... конечно, если файлов с одинаковыми именами больше одного, то скопированы будут все... это единственная проблемка.

А, да, есть ещё одна "неприятность" - в powershell 5.1, при использовании параметра -literalpath, параметр -include не работает, но его можно заменить на параметр -filter, либо воспользоваться крайней версией powershell, т.е. способ обхода бага есть.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»