Назначение Powershell Copy-Item неоднозначно - PullRequest
0 голосов
/ 03 декабря 2018

Предполагая, что "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».

Есть ли решение, которое не уязвимо к условиям гонки?

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете запустить 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 $_
}

Кроме этого я не могупридумайте что-нибудь, что не имело бы гоночного состояния.Это также имеет тот недостаток, что копия будет создана независимо, а затем удалена, если она была создана не в том месте.

...