gpt4 book ai didi

powershell - 我如何重命名/移动项目并覆盖它们,即使它们存在(对于文件、文件夹和链接)?

转载 作者:行者123 更新时间:2023-12-04 01:17:16 26 4
gpt4 key购买 nike

有没有一个命令移动项目(或者只是重命名为源和目标都在一个文件夹中)并强制覆盖适用于任何项目类型(叶子、容器)?

背景:我正在编写一个脚本,用各自的相对符号链接(symbolic link)替换所有硬链接(hard link)和联结。示例代码:

mkdir C:\Temp\foo -ErrorAction SilentlyContinue
'example' > C:\Temp\foo\bar.txt
cd C:\Temp
New-Item -ItemType Junction -Name bar -Target C:\Temp\foo
New-Item -ItemType SymbolicLink -Name bar2 -Target '.\foo'

# Produces error: Rename-Item : Cannot create a file when that file already exists.
Rename-Item -Path 'C:\Temp\bar2' -newName 'bar' -force

# Unexpected behaviour: moves bar2 inside bar
Move-item -Path 'C:\Temp\bar2' -destination 'C:\Temp\bar' -force

# This works as per https://github.com/PowerShell/PowerShell/issues/621
[IO.Directory]::Delete('C:\Temp\bar')
Rename-Item -Path 'C:\Temp\bar2' -newName 'bar'

最佳答案

我认为您正在寻找具有覆盖文件和合并目录选项的 UI 体验。这些只是复杂的错误处理机制,可以解决您看到的相同错误,这要感谢 Microsoft 周到的工程师。

mkdir C:\Temp\foo -ErrorAction SilentlyContinue
'example' > C:\Temp\foo\bar.txt
cd C:\Temp
New-Item -ItemType Junction -Name bar -Target C:\Temp\foo
New-Item -ItemType SymbolicLink -Name bar2 -Target '.\foo'

# Produces error: Rename-Item : Cannot create a file when that file already exists.
Rename-Item -Path 'C:\Temp\bar2' -newName 'bar' -force


这是有道理的。您有两个不同的对象,因此它们不能具有相同的标识符。这就像试图指向两个不同的对象

# Unexpected behaviour: moves bar2 inside bar
Move-item -Path 'C:\Temp\bar2' -destination 'C:\Temp\bar' -force


这并不意外。当您为目标指定一个目录时,它会将其视为应将移动项目放置在其中的目标目录。

# This works as per https://github.com/PowerShell/PowerShell/issues/621
[IO.Directory]::Delete('C:\Temp\bar')
Rename-Item -Path 'C:\Temp\bar2' -newName 'bar'


这本质上是深思熟虑的 Microsoft 工程师通过他们的 UI 为您完成的,用于合并文件夹和覆盖文件。

Note that this is the same behavior for the .NET method in System.IO as well

关于powershell - 我如何重命名/移动项目并覆盖它们,即使它们存在(对于文件、文件夹和链接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42485676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com