Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   ищу PS код для копирования структуры каталогов (http://forum.oszone.net/showthread.php?t=353876)

ruslaw 21-07-2023 08:11 3012659

ищу PS код для копирования структуры каталогов
 
Имеется папка, например D:\xyz со множеством подпапок разного уровня вложения.
Необходим код, создающий папку, напр. D:\tmp_xyz со всей структурой подпапок как в D:\xyz
Раньше с PS ела не имел. Прошу помочь

DJ Mogarych 21-07-2023 09:32 3012662

Код:

$from = "D:\xyz"
$to = "D:\tmp_xyz"

robocopy $from $to /e /create
dir $to -Recurse -Force |? mode -notmatch '^d' |del -Force


Sham 21-07-2023 09:48 3012663

Код:

(gci 'D:\xyz' -dir -rec).fullname.replace('D:\xyz', 'D:\tmp_xyz') |  % { ni -Path $_ -item Directory }

DJ Mogarych 21-07-2023 10:21 3012665

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 21-07-2023 10:55 3012668

Код:

$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


ruslaw 21-07-2023 18:59 3012692

Благодарю за ответы, очень помогло.


Время: 00:39.

Время: 00:39.
© OSzone.net 2001-