try-catch не сработает, когда файл уже существует - PullRequest
0 голосов
/ 05 марта 2019

У меня есть скрипт, который архивирует файлы из источника для каждого года в формате year.zip. Это работает нормально, но в случае, если почтовый индекс уже существует в месте назначения (так же, как источник), я хочу поймать это исключение и распечатать его в журналах. Ниже приведен код, который я должен проверить, существует ли файл, а затем распечатать его в журнале. Тем не менее, это не просто так. Может кто-нибудь указать, как это исправить?

Кроме того, если почтовые индексы существуют, я хочу отменить транзакцию для этого конкретного года (в основном, отменить транзакцию [System.IO.Compression.ZipFile]::CreateFromDirectory($Source, $destination)). Буду признателен, если смогу получить указатели и на это.

ForEach ($group in $groups){
# delete temp directorty to save space on C:\
if (test-path -path $GroupDirectory){
del $GroupDirectory -recurse -force
}

# Create a new directory for the group
$GroupDirectory = New-Item -Path (Join-Path $TmpDirectory.FullName -ChildPath $group.Name) -ItemType Directory
if (test-path -path $destination$GroupDirectory.zip){
    write-output $GroupDirectory.zip" already exists!"
}

# Move files into the new directory
$ZipNames = $group.Group | Move-Item -Destination $GroupDirectory.FullName

# Create the year-specific zip file
[System.IO.Compression.ZipFile]::CreateFromDirectory($GroupDirectory.FullName, ($destination -f $group.Name))

}

Выше кода создает папку с именем «2012» в папке temp, после чего мне нужно проверить, есть ли файл с именем «2012.zip» в папке назначения. Достаточно ли умен тест-путь, чтобы понять разницу?

1 Ответ

3 голосов
/ 06 марта 2019

Использование Test-Path не вернет исключение;он вернет $true или $false, т. е. bool.Вам не нужно использовать try / catch для этого.Просто используйте if / else.

...