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:
- Receber valores de um arquivo
- 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:
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.
Top comments (0)