DEV Community

1

Recebendo dados de uma lista

Vamos aprender como criar pastas, mas dessa vez, recebendo os valores de uma lista. Com um arquivo de texto simples, tendo um nome por linha, criaremos pastas de formas automatizada em um local também informado.

Seguiremos do que vimos no artigo anterior, por isso, recomendo a leitura, embora o código sempre esteja comentado para que seja possível entende-lo.

Para fazer o proposto, precisaremos de dois conceitos novos:

  1. Receber valores de um arquivo
  2. Criar uma lista e percorrer os valores nela

Em um artigo anterior, já fizemos o segundo tópico, mas agora explicaremos um pouco mais ele.

Com o Foreach, podemos percorrer um lista, ou explicando de uma outra forma, pense que temos uma lista de chamada com 10 nomes. Com essa função, em vez de chamarmos todos os alunos juntos, leremos um nome por vez.

Isso é exatamente o que queremos nesse caso, já que poderemos ter um numero qualquer de nomes em nossa lista, e queremos criar uma pasta por nome.

O nosso primeiro tópico (que falaremos em segundo haha) é algo bem mais simples do que parece, já que temos uma forma bem simples de pegar essas informações por meio de uma função já pronta.

Sobre funções, vamos utilizas bastante aqui, voltando com a nossa de criação de pastas, e com uma nova para fazer todo esse processo da lista.

Traduzindo isso em código, temos:

# Para organizar nosso script, vamos manter as funcoes na parte de cima do codigo
# É possivel, diria até que recomendavel, que crie um modulo com as funcoes, mas isso veremos depois
# Funcao para validar as pastas
function Validar-Pasta {
param (
# Aqui definimos qual a posicao e se é obrigatorio ou nao o parametro
# O contador de posicoes comeca em 0, é importante lembrar disso
[parameter(position=0,Mandatory=$True)]
$Local, # Utilizamos a virgula para fazer a separacao quando utilizamos mais de um parametro
[parameter(position=1,Mandatory=$True)]
$nomePasta # O ultimo nao precisa de nada
)
# Validamos se o caminho existe, salvando a resposta em uma variavel
$pastaValidacao = Test-Path -Path "$Local/$nomePasta"
# Como agora teremos varias pastas, nao vamos limpar a tela
# Vamos criar uma identificacao para saber com o que estamos trabalhando
Write-Host "Trabalhando com a pasta: $nomePasta"
# Se ela já existe, exibimos uma mensagem de erro
if ($pastaValidacao) {
# Informamos que a pasta já existe
Write-Host "A pasta $nomePasta já existe no caminho $Local"
}
# Se a pasta existe, executamos o bloco de codigo
else {
# Executar o comando de criação de pasta
$esconderRetorno = New-Item -Path "$Local/$nomePasta" -ItemType "Directory" # Vamos jogar isso numa variavel para nao aparecer o retorno padrao na tela
# Mostrar mensagem de confirmação na tela
Write-Host "A pasta $nomePasta foi criada em $Local"
}
}
# Funcao para receber a lista e o caminho das pastas
function Novas-Pastas {
param (
[parameter(position=0,Mandatory=$True)]
$Local, # Utilizamos a virgula para fazer a separacao quando utilizamos mais de um parametro
[parameter(position=1,Mandatory=$True)]
$caminhoLista # O ultimo nao precisa de nada
)
# Recebemos os valores do arquivo
$listaNomes = Get-Content -Path $caminhoLista
# Vamos criar o loop (Indice dentro da lista)
foreach ($nomePasta in $listaNomes) {
Validar-Pasta $Local $nomePasta # Utilizamos nossa funcao para criar 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 as pastas"
# Receber o caminho do arquivo com a lista de nomes
$caminhoLista = Read-Host "Informe o local onde esta a lista (ex: C:\Temp\nomes.txt)"
# Fazemos o procedimento, informando os parametros conforme definidos na funcao
Novas-Pastas $Local $caminhoLista

Retorno no terminal:

Terminal

Sem duvidas, o Foreach levou meus scripts para um novo nível e acredito que vá ser muito útil, já que esse conceito pode nos ajudar em muitos cenários.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay