Показать полную графическую версию : ищу PS код для копирования структуры каталогов
Имеется папка, например D:\xyz со множеством подпапок разного уровня вложения.
Необходим код, создающий папку, напр. D:\tmp_xyz со всей структурой подпапок как в D:\xyz
Раньше с PS ела не имел. Прошу помочь
DJ Mogarych
21-07-2023, 09:32
$from = "D:\xyz"
$to = "D:\tmp_xyz"
robocopy $from $to /e /create
dir $to -Recurse -Force |? mode -notmatch '^d' |del -Force
(gci 'D:\xyz' -dir -rec).fullname.replace('D:\xyz', 'D:\tmp_xyz') | % { ni -Path $_ -item Directory }
DJ Mogarych
21-07-2023, 10:21
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}
$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
Благодарю за ответы, очень помогло.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.