PowerShell Create Folder if it does not exist

Este será um pequeno post sobre uma pergunta que me fazem ou que me fazem com bastante frequência e sobre a qual vale a pena escrever.

PowerShell Verificar se a pasta existe

Por vezes, ao interagir com o sistema de ficheiros, por exemplo, ao escrever um ficheiro de registo no disco, é importante certificar-se de que a pasta de destino para a qual vamos escrever os ficheiros existe realmente para evitar que o PowerShell lance uma excepção ou, pior ainda, perca dados.

PowerShell e PowerShell Core têm um cmdlet nativo para verificar a existência de um determinado caminho

Test-Path -Path 'C:\Temp\'

O cmdlet de Test-Path tomará um caminho como argumento e devolverá um True (valor booleano) se o caminho dado existir. Isto pode ser facilmente utilizado em scripts para verificar se uma determinada pasta existe e criar se não for como no exemplo seguinte

# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(Test-Path -Path $logPath)){ $paramNewItem = @{ Path = $logPAth ItemType = 'Directory' Force = $true } New-Item @paramNewItem}

Isto é algo que faço tão frequentemente que o coloquei num dos meus modelos de script para não me preocupar com ele cada vez que escrevo código para um novo script.

Verifica se a pasta .Net Way

A Test-Path cmdlet está a chamar uma função .Net incorporada debaixo da capa, no caso de querer impressionar os seus amigos o acima descrito pode ser reescrito assim

# Define where to store logs$logPath = 'C:\MyLogPath\'# Create folder if does not existif (!(::Exists($logPath)){ ::CreateDirectory($logPath)}

Notações de fecho

Os dois métodos para verificar se existe uma pasta que descrevi no artigo são equivalentes. A segunda abordagem é ligeiramente mais performante mas arrisca-se a tornar o seu código menos legível.

Dado o insignificante ganho de desempenho, tenho tendência a preferir o primeiro método pois torna o código muito claro para alguém que está a assumir ou a modificar o meu trabalho.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *