PowerShell - ищу PS код для копирования структуры каталогов

Ответить
Аватара пользователя
ruslaw

PowerShell - ищу PS код для копирования структуры каталогов

Сообщение ruslaw »

Имеется папка, например D:\xyz со множеством подпапок разного уровня вложения.

Необходим код, создающий папку, напр. D:\tmp_xyz со всей структурой подпапок как в D:\xyz

Раньше с PS ела не имел. Прошу помочь
Аватара пользователя
DJ Mogarych

Re: PowerShell - ищу PS код для копирования структуры каталогов

Сообщение DJ Mogarych »

Код:

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

$from = "D:\xyz"
$to = "D:\tmp_xyz"
robocopy $from $to /e /create
dir $to -Recurse -Force |? mode -notmatch '^d' |del -Force
Аватара пользователя
Sham

Re: PowerShell - ищу PS код для копирования структуры каталогов

Сообщение Sham »

Код:

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

(gci 'D:\xyz' -dir -rec).fullname.replace('D:\xyz', 'D:\tmp_xyz') |  % { ni -Path $_ -item Directory }
Аватара пользователя
DJ Mogarych

Re: PowerShell - ищу PS код для копирования структуры каталогов

Сообщение DJ Mogarych »

Sham, отличная идея, а вы проверяли работоспособность?

У меня валит кучу ошибок



Код:

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

New-Item : Не удается привязать объект ввода, так как он не содержит сведения, необходимые для привязки всех обязательных параметров:  Pa
th
строка:1 знак:91
+ ... e.Replace('D:\xyz', 'D:\tmp_xyz') | New-Item -ItemType Directory
+                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (D:\firmware\to\...t\logging\ru-ru:String) [New-Item], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectMissingMandatory,Microsoft.PowerShell.Commands.NewItemCommand

С foreach работает:



Код:

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

(gci 'D:\xyz' -Recurse |? psiscontainer).FullName.Replace('D:\xyz', 'D:\tmp_xyz') |% {$null = New-Item $_ -ItemType Directory -ErrorAction SilentlyContinue}
Аватара пользователя
YuS_2

Re: PowerShell - ищу PS код для копирования структуры каталогов

Сообщение YuS_2 »

Код:

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

$source = ".\Folder1\"
$destination = ".\Folder2"
$src = gi -lit $source.trimend('\') -force
dir -lit $src.fullname -rec -force -dir |%{
	$d = $_.fullname.replace($src.fullname,$destination)
	if (!(test-path -lit $d)){$null = md $d -force}
}

PS

На другом форуме, где гражданин тоже оставил просьбу в поиске кода, подсказали более простой вариант:



Код:

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

$source = ".\Folder1"
$destination = ".\Folder2"
copy $source $destination -filter {PSIsContainer} -force -rec
Ответить

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