Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Копирование файла с полной структурой директорий

Ответить
Настройки темы
PowerShell - Копирование файла с полной структурой директорий

Старожил


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

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


Доброго времени суток всем!
Никак не получается копирование файла с полной структурой папок. Вроде и не сложный вопрос, но перепробовал и Xcopy, Robocopy и просто Copy-Item, файл копируется без папок.
Собственно, к примеру, есть путь:
Код: Выделить весь код
C:\papka\papka1\papka2\README.txt
Нужно скопировать файл README.txt на другой раздел, к примеру D, чтобы сохранилась вся структура, включая корневую директорию.
В директории papka2 могут быть и другие файлы и папки, но нужно скопировать только файл README.txt
В итоге на диске D должна получится такая структура:
Код: Выделить весь код
papka
  papka1
    papka2
      README.txt
Буду премного благодарен за советы и подсказки.

Отправлено: 15:57, 16-01-2021

 

Старожил


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

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


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

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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для YuS_2

Ветеран


Contributor


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

Профиль | Отправить 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


Ветеран


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

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


Цитата Uragan66:
Пользователи Simple Player часто делятся скриптами и бывает кому-то нужен именно старый скрипт. А их принято выкладывать в полной структуре папок.
Вы слышали про такую штуку, как виртуальная катологизация?

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


Старожил


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

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


Цитата YuS_2:
Но если таки необходимо на powershell »
YuS_2, спасибо! Скрипт хороший. Но для моей задачи не совсем подходит, мне нужно копировать конкретный файл/файлы, не затрагивая при этом другие файлы с таким же расширением, а в Вашем скрипте копирование идёт по маске.
Цитата greg zakharov:
Вы слышали про такую штуку, как виртуальная катологизация? »
честно говоря, только в общих чертах. Но, думаю, это не совсем подойдёт... Если подойдёт мне, то может не подойти другим пользователям плеера. Скрипты то для этого и выкладываются в полной структуре папок, что большинство пользователей не знает куда их ложить, многие и не хотят узнавать, увы... А уж с виртуальной катологизацией то точно никто не захочет разбираться и вникать в это, к сожалению.

Отправлено: 16:49, 22-01-2021 | #14


Аватара для YuS_2

Ветеран


Contributor


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

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


Цитата Uragan66:
копирование идёт по маске. »
полное имя файла с расширением, тоже может быть маской... конечно, если файлов с одинаковыми именами больше одного, то скопированы будут все... это единственная проблемка.
А, да, есть ещё одна "неприятность" - в powershell 5.1, при использовании параметра -literalpath, параметр -include не работает, но его можно заменить на параметр -filter, либо воспользоваться крайней версией powershell, т.е. способ обхода бага есть.

-------
scio me nihil scire

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

Отправлено: 21:38, 22-01-2021 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Копирование файла с полной структурой директорий

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование папок с файлами с сохранением директорий по маскам buntr Скриптовые языки администрирования Windows 19 22-06-2018 07:03
PowerShell - [решено] Изменение xml файла со сложной многоуровневой структурой Bolshoi Скриптовые языки администрирования Windows 3 17-01-2018 10:58
CMD/BAT - Копирование со структурой westovich Скриптовые языки администрирования Windows 6 09-06-2016 08:34
CMD/BAT - [решено] Копирование файлов из переменных директорий Сантей Скриптовые языки администрирования Windows 9 25-06-2014 14:57
Автоматический запуск пакетного файла после полной загрузки ОС ChVL Автоматическая установка Windows 2000/XP/2003 8 11-05-2007 00:16




 
Переход