Powershell Copy-To - если каталог назначения существует, копирует в существующий каталог
Да, у меня есть простой Copy-Item
скрипт для копирования файлов из одной папки назначения в другую.
releasecode.ps1
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$source,
[Parameter(Mandatory=$true)]
[string]$destination
)
Process {
Copy-Item -Path $source -Destination $destination -Recurse -Force
я бегу releasecode.ps1
используя следующую командную строку:
. \ releasecode.ps1 -источник "C:\test\from" -destination "C:\test\to"
from
Папка имеет следующую структуру:
.
├── from
├── stain.txt
├── test1.txt
├── folder
| ├── test2.bmp
Это правильно копирует в (На первом экземпляре):
.
├── to
├── stain.txt
├── test1.txt
├── folder
| ├── test2.bmpthe
Если я перезапустил его сразу после этого, from
папка создается как каталог внутри `to', а не просто перезаписывает существующую структуру:
.
├── to
├── stain.txt
├── test1.txt
├── folder
| ├── test2.bmp
├── from
| ├── stain.txt
| ├── test1.txt
| └── folder
| ├── test2.bmp
Как мне просто перезаписать существующий to
структура каталогов, если файлы и папки существуют в настоящее время.
Дополнительная информация
Запуск этого на Windows Box
$PSVersionTable
:
1 ответ
Вы столкнулись с Copy-Item
Гоча связана с копированием исходных каталогов.
Если место назначения существует и является папкой, командлет копирует источник в место назначения.
Копировать элемент C:\src\a C:\dst\b -Recurse C:\ C:\ D─dst ├─dst | B─b | └─b S─src | A─ а └─a ⇒ | ├─bar.txt Bar─bar.txt | └─baz.txt └─baz.txt └─src └─a ├─bar.txt └─baz.txt
Если место назначения не существует, командлет копирует источник в качестве места назначения.
Копировать элемент C:\src\a C:\dst\b -Recurse C:\ C:\ D─dst ├─dst S─src | B─ б A─a | ├─bar.txt Bar─bar.txt ⇒ | └─baz.txt └─baz.txt └─src └─a ├─bar.txt └─baz.txt
Обычный способ обработки этого в PowerShell - сначала убедиться, что папка назначения существует, а затем скопировать содержимое исходной папки:
if (-not (Test-Path $destination)) {
New-Item -Type Directory -Path $destination | Out-Null
}
Copy-Item -Path $source\* -Destination $destination -Recurse -Force
В качестве альтернативы вы можете использовать robocopy
, который не имеет этой проблемы:
robocopy C:\src\a C:\dst\b /s