Скрипт PowerShell не копирует подпапки и их содержимое - PullRequest
0 голосов
/ 29 апреля 2020

Я впервые использую собственный сценарий Powershell, и я думаю, что я что-то упустил. Все работает, за исключением того, что оно не копирует подпапки и их содержимое.


$sourcePath = 'C:\Users\User\Desktop\test\test1'
$destinationPath = 'C:\Users\User\Desktop\test\test2'
$files = Get-ChildItem -Path $sourcePath -Recurse
$filecount = $files.count
$i=0
Foreach ($file in $files) {
    $i++
    Write-Progress -activity "Moving files..." -status "($i of $filecount) $file" -percentcomplete (($i/$filecount)*100)

    # Determine the absolute path of this object's parent container.  This is stored as a different attribute on file and folder objects so we use an if block to cater for both
    if ($file.psiscontainer) {$sourcefilecontainer = $file.parent} else {$sourcefilecontainer = $file.directory}

    # Calculate the path of the parent folder relative to the source folder
    $relativepath = $sourcefilecontainer.fullname.SubString($sourcepath.length)

    # Copy the object to the appropriate folder within the destination folder
    copy-Item $file.fullname ($destinationPath + $relativepath)
}

Я уверен, что это как-то связано с Path вместо Root или опцией Recurse, которая не используется правильно.

Если бы кто-то мог мне помочь, это было бы очень признательно.

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

Для рекурсивного копирования используйте

Copy-Item -Path <src> -Destination <dest> -Recurse

См. Официальная документация .

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

Если вам действительно нужен этот обход, просто отладьте свой код, напечатав $files и источник и цель вашего copy-Item, это скажет вам источник проблем. Пожалуйста, опубликуйте этот вывод в OP.

Возможно, вам придется использовать опцию -Directory для Get-ChildItem или класса [System.IO.Path].

...