假设“ C:\ Temp \ first.txt”是一个文件,是否有某种方法可以确保
Copy-Item -Path "C:\Temp\first.txt" -Destination "C:\Temp\second.txt"
创建文件“ C:\ Temp \ second.txt”,否则失败?如果目标“ C:\ Temp \ second.txt”已作为目录存在,则我不希望它创建文件“ C:\ Temp \ second.txt \ second.txt”。
有没有不容易受到比赛条件影响的解决方案?
答案 0 :(得分:3)
如果结果的目录路径与目标文件夹相同,则可以使用参数Copy-Item
运行-PassThru
并引发错误:
$src = 'C:\Temp\first.txt'
$dst = 'C:\Temp\second.txt'
try {
$f = Copy-Item -Path $src -Destination $dst -PassThru
if ($f.DirectoryName -eq $dst) {
throw "$dst already exists as a folder."
}
} catch {
Remove-Item $f
throw $_
}
除此之外,我想不出没有比赛条件的任何东西。这也有一个缺点,即无论创建副本还是在错误的位置创建副本,都将删除副本。