[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:\toast
与 C:\test
相同,但在此过程中已重命名。
但是,如果您提供源对象(文件夹)所在的目标路径,它将位于那里。
Copy-Item -path C:\test -Destination D:\toast
D:\toast
在我们之前的操作中确实存在,因此将在其中创建 C:\test
的副本:D:\toast\test
搜索了一段时间后,我需要 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:\toast
与 C:\test
相同,但在此过程中已重命名。
但是,如果您提供源对象(文件夹)所在的目标路径,它将位于那里。
Copy-Item -path C:\test -Destination D:\toast
D:\toast
在我们之前的操作中确实存在,因此将在其中创建 C:\test
的副本:D:\toast\test