Powershell Copy-Item рекурсивно, но не включает имя папки

20

Это глупый вопрос, но я просто не знаю, почему он не работает.

Я пытаюсь скопировать файлы из FolderA в FolderB рекурсивно. Я делаю это:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

Работает отлично, без проблем.

За исключением результата в FolderB это:

C:\FolderB\FolderA\file.txt

Тогда как я хочу, чтобы это было:

C:\FolderB\file.txt

Какую глупую очевидную вещь я пропускаю?

CleverPatrick
источник
4
Вы не делаете ничего глупого, copy-item - это просто PITA.
StingyJack

Ответы:

28

Ваша команда говорит PowerShell скопировать саму папку со всем ее содержимым в папку назначения. Чтобы скопировать только содержимое исходной папки, измените путь следующим образом:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

Обратите внимание на звездочку (*) после имени папки. Это позволит скопировать содержимое (включая подпапки) папки, но не саму папку в папку назначения.

Использование командлета Copy-Item

FastEthernet
источник
2
Обратите внимание, что это не копирует структуру папок, если папка назначения не существует. Вызов md "C:\FolderB"до этого, Copy-Itemкажется, позволяет избежать этой проблемы.
zett42
Основываясь на приведенном выше комментарии @ zett42, если целевая папка еще не существует, похоже, она Copy-Itemбудет воспроизводить структуру папок, но на один уровень ниже (например C:\FolderA\B\C, копируется C:\FolderB\Cвместо C:\FolderB\B\C), а также может завершиться ошибкой, если существует несколько подпапок. Всегда проверяйте, существует ли папка назначения перед вызовом Copy-Item. Это пахнет как ошибка (я не вижу никакой причины, почему это противоречивое поведение было бы желательно).
Марк Дурдин
1
Смотрите также комментарий на SO .
Марк Дурдин
0

Вы можете использовать -File -Recurse для копирования только файлов рекурсивно:

Copy-Item -Path "C: \ Source" -Назначение "C: \ Dest" -File -recurse -Force -Verbose

Или используйте -Directory -Recurse для копирования только структуры empy:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -Directory -recurse -Force -Verbose

С уважением,

Пол Педроза

Пол Андрес Педроза М
источник
-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Также будет работать.

Марк Гладсон
источник
1
Похоже, что это комментарий к аналогичному ответу FastEthernet. Если вы хотите предложить альтернативный ответ, вы должны объяснить, почему он отвечает на вопрос.
Blackwood
Это создает C: \ FolderB, если он не существует, но создает C: \ FolderB \ FolderA, если C: \ FolderB существует. Если вы выполните эту команду дважды, вы можете получить две копии всего в немного разных местах! Так много боли.
Ламарт