Копіювальний елемент Powershell рекурсивно, але не включає ім'я папки


20

Це дурне питання, але я просто не знаю, чому це не працює.

Я намагаюся рекурсивно копіювати файли з FolderA в FolderB. Я роблю це:

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

Це чудово працює, без проблем.

За винятком результату в FolderB є такий:

C:\FolderB\FolderA\file.txt

Тоді як я хочу, щоб це було:

C:\FolderB\file.txt

Яку дурну очевидну річ мені не вистачає?


4
Ви нічого дурного не робите, копія - це лише ПІТА.
StingyJack

Відповіді:


28

Ваша команда повідомляє PowerShell скопіювати саму папку з усім її вмістом у папку призначення. Щоб скопіювати лише вміст вихідної папки, змініть свій шлях наступним чином:

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

Помітьте зірочку (*) після імені папки. Це скопіює вміст (включаючи вкладені підпапки) папки, але не саму папку в цільову папку.

Використання командного елемента Копіювання-елемента


2
Зауважте, що це не копіює структуру папок, якщо папка призначення не існує. Здійснення дзвінків md "C:\FolderB"раніше, Copy-Itemсхоже, уникне цієї проблеми.
zett42

Спираючись на коментар @ zett42 вище, якщо папка призначення вже не існує, схоже, вона Copy-Itemбуде відтворювати структуру папок, але на один рівень вниз (наприклад C:\FolderA\B\C, скопійовано на C:\FolderB\Cзамість цього C:\FolderB\B\C), а також може вийти з ладу, коли існує декілька підпапок. Завжди переконайтеся, що папка призначення існує перед тим, як викликати елемент копіювання. Це пахне помилкою (я не бачу жодної причини, чому таке непослідовне поведінку було б бажаним).
Марк Дурдін

1
Дивіться також коментар до SO .
Марк Дурдін

0

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

Копіювати-Пункт-Шлях "C: \ Джерело" -Визначення "C: \ Dest" -файл -ресурс -Force -Verbose

Або скористайтеся -Directory -Запросити скопіювати лише структуру папок empi :

Копіювати-Елемент-Шлях "C: \ Джерело" -Визначення "C: \ Dest" -Directory -recurse -Force -Verbose

З повагою,

Пол Педроза


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

Також буде працювати.


1
Схоже, це коментар до подібної відповіді FastEthernet. Якщо ви хочете запропонувати альтернативну відповідь, вам слід пояснити, чому вона відповідає на питання.
Блеквуд

Це створює C: \ FolderB, якщо його не існує - але створює C: \ FolderB \ FolderA, якщо C: \ FolderB існує. Якщо виконати цю команду двічі, ви можете отримати дві копії всього в дещо різних місцях! Стільки болю.
Ламарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.