[Powershell]:第二次执行 Copy-Item 创建子文件夹 (5.1.17763.1007)

[Powershell]: 2nd Execution of Copy-Item creates subfolder (5.1.17763.1007)

搜索了一段时间后,我需要 post 我的问题在这里: 我想做一个简单的任务:

copy-item -path "C:\Folder Copied" -destination "C:\Folder Copied_New" -recurse

假设目录“Folder Copied_New”存在于“C:”中,PS 将创建一个文件夹,并复制文件夹(及其内容)“C:\Folder Copied”到“文件夹 Copied_New”

但是,如果您第二次执行该命令,会发生以下情况:

Powershell 创建:“C:\Folder Copied_New\Folder 已复制”(内容“Test.txt”也已复制到这个新创建的文件夹...

第3次执行命令,提示文件夹已存在...

所以我的问题是: 在我第二次 运行 命令后,PS 应该抛出一个错误,即“文件夹 Copied_New”。我该怎么做?

我尝试复制并重命名新文件夹,在路径中使用和不使用“”,但没有任何效果。我确实考虑过使用 -Testpath,但我想我向社区询问了一种更简单的 (BestPractice) 方法。

在此先感谢您的阅读和建议!

不是答案而是渴望在评论中写下。 你能运行按照脚本并向我们展示输出吗?

$root = "$($env:TEMP)\test"
$source = "$($root)\Logfiles"
$destination = "$($root)\Drawings\Logs"

# Verify folders don't exist yet
if (Test-Path $source) {Throw}
if (Test-Path $destination) {Throw}

# Set up
New-Item $source, $destination -ItemType Directory -Force | Out-Null # Create folders
New-Item "$($source)\testfile" -ItemType File -Force | Out-Null # Create a testfile

# Show files/folders before copy
Write-Output "Before copy"
Get-ChildItem $root -Recurse | select fullname

# Copy first time
Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue
Write-Output "After first time copy"
Get-ChildItem $root -Recurse | select fullname

# Copy second time
Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue
Write-Output "After second time copy"
Get-ChildItem $root -Recurse | select fullname

# Copy third time
Copy-Item -path $source -destination $destination -Recurse -ErrorAction Continue
Write-Output "After third time copy"
Get-ChildItem $root -Recurse | select fullname

# Clean up
Remove-Item $source, $destination -Force -Recurse | Out-Null

在我的电脑上,我没有观察到任何异常行为。源文件夹在第一次后被复制到目的地。第二个 运行 不会改变任何东西,第三个 运行.

也不会

该行为是默认行为:

假设您想复制并重命名一个项目,所以您这样做:

Copy-Item -path source.txt -Destination destination.txt

您需要一个名为 destination.txt 的文件,其内容为 source.txt

如果您想复制一个文件但不重命名它,您可以这样做:

Copy-Item -path source.txt -Destination C:\test

您希望文件 source.txt 出现在 C:\test 中。如果 C:\test 不存在,它将被创建。

现在让我们尝试在目标不存在时复制文件夹。

Copy-Item -path C:\test -Destination D:\toast 

目标不存在,因此您通过将源文件夹复制到目标来创建它。目的地的内容将与来源相同。文件夹 D:\toastC:\test 相同,但在此过程中已重命名。
但是,如果您提供源对象(文件夹)所在的目标路径,它将位于那里。

 Copy-Item -path C:\test -Destination D:\toast 

D:\toast 在我们之前的操作中确实存在,因此将在其中创建 C:\test 的副本:D:\toast\test