2016-02-22 2 views
0

Как переписать ниже код, чтобы он мог быть сгруппирован только в один оператор IF вместо нескольких IF и выполнить команду удаления только если все файлы (outPath, outPath2, outPath3) существуют.Powershell удалить файлы

If ($outPath){ 
Remove-Item $outPath 
} 

If ($outPath2){ 
Remove-Item $outPath2 
} 

If ($outPath3){ 
Remove-Item $outPath3 
} 

ответ

2

Если вы хотите быть уверены, что все тракты можно использовать Test-Path с -notcontains для получения желаемых результатов.

$paths = $outPath1, $outPath2, $outPath3 
if ((test-path $paths) -notcontains $false){ 
    Remove-Item -Path $paths 
} 

Test-Path работы с массивами путей. Он вернет массив booleans. Если один из путей не существует, возвращается false. Значение if зависит от этой логики.

Поскольку вы удаляете их только в том случае, если они существуют, вам не нужно беспокоиться о их существовании с помощью командлета Remove-Item.

+0

'(тестовый путь $ paths) -неконец $ false' ... хороший подход – Kiran

1

это удалит файлы, если они существуют, и устранит ошибки, если файлы не найдены. Недостатком является то, что если должны быть ошибки, отличные от (путь не найден), то они также будут подавлены.

Remove-Item -Path $outPath,$outPath1,$outPath2 -ErrorAction SilentlyContinue 

EDIT

, если вы хотите удалить, если все 3 файла существует, то:

if((Test-Path $outPath) -and (Test-Path $outPath1) -and (Test-Path $outPath2)) 
    { 
     try 
     { 
      Remove-Item -Path $outPath,$outPath1,$outPath2 -ErrorAction Stop 
     } 
     Catch 
     { 
      throw $_ 
     } 

    } 
+1

Я не думаю, что оп просит об этом. Он только хочет их удалить, если все существует – Matt

+0

ах да ладно:) ... спасибо @Matt – Kiran

Смежные вопросы