Seguindo com o nosso post anterior, vamos agora antes de criar a pasta, validar se ela já não existe no sistema para evitar duplicações e erros.
Para fazer isso precisamos receber informações do sistema e valida-las, sendo mais especifico, precisamos saber quais pastas existem e verificar se a que queremos criar está entre elas. Esse cenário é muito comum, quando temos um script que ira continuamente ser executado ou se queremos validar uma instalação.
Em nosso script, vamos adicionar antes da criação da pasta, uma etapa de validação onde utilizaremos uma função do Powershell chamada Test-Path, ou se traduzirmos Testar-Caminho.
Com essa função, informando um caminho, validamos se o mesmo existe ou não.
Notamos o como ela é especifica e muito simples de usar, gostaria de aproveitar esse momento para compartilhar algo sobre a linguagem. Costumo dizer que sempre que pensamos em algo que muitas pessoas utilizariam e que faz sentido, é muito provável que já tenhamos uma função pronta para esse procedimento, valendo sempre muito a pena pesquisar sobre antes de tentar criar manualmente algo que faça o mesmo procedimento.
Fora a função, precisamos tratar o seu retorno, uma vez que com ela apenas saberemos se o caminho existe ou não, por meio do retorno True(verdadeiro) ou False(falso).
Para isso, vamos usar a estrutura IF-ELSE, onde passamos uma parâmetro que queremos validar. Nesse caso, utilizaremos isso de uma forma bem simples, mas conversaremos melhor sobre.
Traduzindo isso em código:
# Limpamos a tela para facilitar a visualização | |
Clear-Host | |
# Receber o local e armazenar em uma variável chamada Local | |
$Local = Read-Host "Informe o local onde quer criar a pasta" | |
# Receber o nome da pasta e armazenar na variável nomePasta | |
$nomePasta = Read-Host "Informe um nome para a pasta" | |
# Validamos se o caminho existe, salvando a resposta em uma variavel | |
$pastaValidacao = Test-Path -Path "$Local/$nomePasta" | |
# Se ela já existe, exibimos uma mensagem de erro | |
if ($pastaValidacao) { | |
# Informamos que a pasta já existe | |
Clear-Host # Limpamos a tela para deixar mais bonito | |
Write-Host "A pasta $nomePasta já existe no caminho $Local" | |
} | |
# Se a nao pasta existe, executamos o bloco de codigo | |
else { | |
# Executar o comando de criação de pasta | |
New-Item -Path "$Local/$nomePasta" -ItemType "Directory" | |
# Mostrar mensagem de confirmação na tela | |
Clear-Host # Limpamos a tela para deixar mais bonito | |
Write-Host "A pasta $nomePasta foi criada em $Local" | |
} |
Para testar vamos tentar criar a mesma pasta duas vezes, no lado esquerdo temos a primeira tentativa e no direito a segunda.
Como podemos ver, nossa validação está funcionando e o sistema não tenta criar uma pasta já existente.
Com essas pequenas adições, conseguimos aprimorar nosso script de criação de pastas e aumentar nosso leque de possibilidades dentro do Powershell. mas será que podemos fazer isso pelo caminho mais longo? Sem utilizar o Test-Path?
E a resposta é sim, embora não recomende.
Como o objetivo aqui é aprender, vamos pensar em como podemos fazer isso, mesmo não fazendo muito sentido, uma vez que aumentaríamos sem precisar a complexidade de nosso código e isso nunca é indicado, já que aumenta as chances de termos problemas.
Vamos pensar um pouco no que nossa função faz:
- Recebe um caminho
- Verifica quais pastas existem dentro do caminho base
- Valida se existe alguma pasta com o mesmo nome da nossa
- Retorna verdadeiro ou falso
Para validar esse algoritmo, vamos criar um outro script com esse conceito adicionado a nossa criação de pastas:
# Limpamos a tela para facilitar a visualização | |
Clear-Host | |
# Receber o local e armazenar em uma variável chamada Local | |
$Local = Read-Host "Informe o local onde quer criar a pasta" | |
# Receber o nome da pasta e armazenar na variável nomePasta | |
$nomePasta = Read-Host "Informe um nome para a pasta" | |
# Vamos começar com as validações | |
$listaPastas = Get-ChildItem -Path $Local -Directory # Recebemos todas as pastas dentro de um caminho, junto com todas as informações dela | |
# Como podemos ter varias pastas, teremos que criar um loop, verificando item a item de nossa lista | |
foreach ($pasta in $listaPastas) { | |
$pasta = $pasta.name # Como queremos validar apenas o nome da pasta, utilizaremos apenas a propriedade NAME | |
# Para compararmos valores, utilizamos o parametro -eq | |
if ($nomePasta -eq $pasta) { | |
$pastaValidacao = "Existe" # Se encontrarmos uma pasta com o mesmo nome, atribuimos o valor Existe para nossa variavel de validacao | |
} | |
} | |
# Se ela já existe, exibimos uma mensagem de erro | |
if ($pastaValidacao -eq "Existe") { | |
# Informamos que a pasta já existe | |
Clear-Host # Limpamos a tela para deixar mais bonito | |
Write-Host "A pasta $nomePasta já existe no caminho $Local" | |
} | |
# Se a pasta nao existe, executamos o bloco de codigo | |
else { | |
# Executar o comando de criação de pasta | |
New-Item -Path "$Local/$nomePasta" -ItemType "Directory" | |
# Mostrar mensagem de confirmação na tela | |
Clear-Host # Limpamos a tela para deixar mais bonito | |
Write-Host "A pasta $nomePasta foi criada em $Local" | |
} |
Não seria possível concluirmos esse modo difícil com o conhecimento que explicamos até aqui, mas futuramente vamos conversar mais sobre Foreach, já que ele vai ser muito útil para nossas automações.
Nosso caminho difícil pode gerar problemas, uma vez que tentando validar se nossa pasta já existe, não estamos trabalhando com um cenário onde nosso caminho não existe.
Será que existe uma forma simples de tratar erros em nosso código?
E a resposta inicial é... TRY-CATCH, ou como gosto de chamar, o próximo tópico que conversaremos nessa serie haha
Top comments (0)