powershell get-item |copy-item не сохраняет структуру папок только для одной папки - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь переместить все папки / подпапки / подфайлы из одной папки на сервере в другую, используя скрипт powershell, сохраняя при этом одинаковую файловую структуру.Для этого я использую Get-childItem |копирования элемента.Все папки, подпапки и подфайлы перемещаются правильно, КРОМЕ первого каталога в каталоге.Вместо этого он выводит все эти подпапки / подпапки из этой папки в место назначения.Однако он сохраняет их структуру, но не включает их родительский каталог.Мой код выглядит следующим образом:

Get-ChildItem $sourceFilePath -Force | Copy-Item -Destination ("*file path*" -f $destinationServer, $destinationClient) -Recurse -Force 
  • filepath перефразирован для улучшения читабельности
  • $ sourceFilePath - исходная папка, которую я пытаюсь скопировать
  • $ destination server / $ destinationClient - это переменные, используемые в перефразированном "пути к файлу"

Я не могу понять, почему этот код работает для всех других папок, подпапок и файлов, КРОМЕ этого для этогоотдельная папка и ее элементы.Любая помощь будет принята с благодарностью, и если есть какая-либо другая информация, которая может помочь, пожалуйста, дайте мне знать.


Ответ благодаря @Christian Müller:

New-Item $destinationFilePath -name "MissingFolder" -type directory -Force | Out-Null

Get-ChildItem $sourceFilePath -Force | Copy-Item -Destination ("*filepath*" -f $destinationServer, $destinationClient) -Recurse -Force

1 Ответ

0 голосов
/ 30 ноября 2018

Это действительно странная ошибка, которая также удивила меня!:)

Кажется, что если базовый каталог назначения не существует, то он только создается, но не с содержимым.

Так что с помощью этой конструкции вы можете даже отладить это поведение в ISE:

$sourceFilePath = "c:\temp\Test1"
$destPath = "c:\temp\Test2"
$a=Get-ChildItem $sourceFilePath -Force

rm -Force $destPath
foreach($x in $a) {
    $x | Copy-Item -Destination "$destPath" -Recurse -Force 
}

dir $destPath

Сначала создайте целевой каталог, решив проблему, с помощью New-item:

$sourceFilePath = "c:\temp\Test1"
$destPath = "c:\temp\Test2"
$a=Get-ChildItem $sourceFilePath -Force

rm -Force $destPath

New-Item -ItemType Directory -Force -Path $destPath
foreach($x in $a) {
    $x | Copy-Item -Destination "$destPath" -Recurse -Force 
}

dir $destPath

Но для моего примера это будет работать, если вообще не использовать "Get-ChildItem"но

Copy-Item c:\temp\test1 -Destination c:\temp\test2 -Recurse -Force

Будет ли это работать для вас?

Copy-Item $sourceFilePath -Destination ("*file path*" -f $destinationServer, $destinationClient) -Recurse -Force 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...