powershell - Powershell Copy-To - 如果目标目录存在,则复制到现有目录
问题描述
对,我有一个简单的Copy-Item
脚本可以将文件从一个目标文件夹复制到另一个。
发布代码.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 -source "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
:
解决方案
您遇到了Copy-Item
与复制源目录相关的问题。
如果目标存在并且是一个文件夹,则 cmdlet 会将源复制到目标。
复制项 C:\src\a C:\dst\b -Recurse C:\ C:\ ├─dst ├─dst | └─b | └─b └─src | └─a └─a ⇒ | ├─bar.txt ├─bar.txt | └─baz.txt └─baz.txt └─src └─a ├─bar.txt └─baz.txt
如果目标不存在,则 cmdlet 将源复制为目标。
复制项 C:\src\a C:\dst\b -Recurse C:\ C:\ ├─dst ├─dst └─src | └─ b └─a | ├─bar.txt ├─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
推荐阅读
- javascript - 无法为 Vega-Lite 设置宽度和高度
- qt - 单击QTabWidget的cornerWidget后如何将焦点设置回当前选项卡小部件?
- reactjs - Rechart Legend 掩盖了 Mobile 中的图表
- r - r 按组求和矩阵
- amazon-web-services - ssl 证书不安全
- javascript - HTML 页面看起来像是在 javascript 运行后加载。为什么 h1 的初始 HTML 具有 color=orange 的样式,但在加载期间从未在页面上观察到?
- java - 安装了 Java 14 但 Java 版本仍显示旧 Java
- c - 为什么我的代码只计算字符串中小写字母的频率
- node.js - NODE.JS 配置 server/index.js 从服务器位置运行
- reactjs - 如果是常量,如何清除 useMutation 错误?