Pesquisar este blog

segunda-feira, 2 de outubro de 2017

Aprenda o FOR de uma vez por todas (extra fácil)

Bom fiz esse tópico para facilitar a vida de quem ainda tem problema com o comando "for",Para ser sincero eu também não sabia usar direito ele ate umas duas semanas atrás, mais ai eu desvendei o mistério e irei compartilhar a formula secreta com vocês,bom o grande truque quando vai se aprender um comando tão complexo quanto o for está na aula experimental isso é você vendo com os seus próprios olhos o que cada complemento faz.

Obs -Usarei exemplos daqui do forum no tutorial e não estranhem se aparecer uma frase idêntica a do boss pois não da pra simplificar mais, então vamos começar.

base do comando isso é:


CÓDIGO:
For "complemento" %%variavel in (conjunto) do (ação sobre o conjunto)


Exemplos básicos desse comando

CÓDIGO:
for %%a in (Pasta1 Pasta2 Pasta3) do (md %%a)


CÓDIGO:
for %%b in (notepad.exe msnmsgr.exe ) do (taskkill -f -im %%b)


CÓDIGO:
for %%c in (File.txt File2.txt) do (del /s /f /q %%c)


Antes que você tenha essa duvida (Não importa a variável %%a %%b %%c tudo vai dar no mesmo)

Esses exemplos foi só pra dar uma pequena amostra do que este comando e capaz mais isso não e nem o começo agora vamos ver os complementos para utilização do "for".


> Opções para serem utilizadas antes dos "complementos"
[/L] - Serve para especificar um loop "for /l %%a in (1,1,100) do (echo %%a)"Exemplos + Explicação
[/D] - Serve para listar diretórios "for /d %%a in (*) do (echo %%a)" -------->Exemplos + Explicação
[/R] - E um Incremento para a opção '/d' "for /d /r %%a in (*) do (echo %%a)"Exemplos + Explicação 
[/F] - Serve como um ultilitario avançado de textos "tem muitos exemplos"

> Opções no "Conjunto" 
[""] - Especifica uma cadeia de caracteres "for /f "tokens=*" %%a in ("%Date%") do (echo %%a)" 
[' '] - Especifica um comando "for /f "tokens=*" %%a in ('type Arquvio.txt') do (echo %%a)" 
[ ] - Especifica conjunto de arquivos "for %%a in (Ola.txt Final.txt) do (del /s /f /q %%a)" 

> Complementos na opção /f 

Atenção ! Esses comandos so funcionam se estiverem acompanhados da opção '/F' & Antes de ver os "complementos" (goto teste)

[tokens] Limita visualização de camadas (goto tokens)
[delims] Especifica o caracter delimitador (goto Delims)
[skip] Especifica a quantidade de linhas para serem puladas (goto Skip)
[eol] Especifica o caractere para ser ignorado... (goto eol)
[usebackq] Muda a forma de se interpretar o conjunto (goto userbackq)
goto Sets

:teste
bom e meio dificil explicar esses complementos mais para melhor entendimento vamos precisar disso

CÓDIGO:
Linha1 Parte1 Teste1
Linha2 Parte2 Teste2
Linha3 Parte3 Teste3
Cole dentro do bloco de notas e salve como "Arquivo.txt"
obs - Quando tiver a hashtag #PodeUsar esta se referindo ao "Arquivo.txt" acima
goto:eof

:tokens
Veja você mesmo o uso desse comando
#PodeUsar

CÓDIGO:
for /f "Tokens=1" %%a in (Arquivo.txt) do (echo %%a)

O resultado disso seria

CÓDIGO:
Linha1
Linha2
Linha3

e se colocarmos

CÓDIGO:
for /f "Tokens=2" %%a in (Arquivo.txt) do (echo %%a)

o resultado seria

CÓDIGO:
Parte1
Parte2
Parte3

para que vejamos todo o conteudo do arquivo ultilizamos o caractere '*'

CÓDIGO:
for /f "Tokens=*" %%a in (Arquivo.txt) do (echo %%a)

bom podemos fazer variações na ordem de como se visualizara.

CÓDIGO:
for /f "Tokens=1,2" %%a in (Arquivo.txt) do (echo %%a %%b)
Dai isso resultaria em
CÓDIGO:
Linha1 Parte1
Linha2 Parte2
Linha3 Parte3
Percebam que no (conjunto de ação) eu coloquei "%%a" e "%%b" pois se ficasse só o "%%a" não apareceria a segunda coluna de linhas, coloquei o "%%b" por que o "B" e o numero afrente do "A", tipo se a variável fosse "%%1" ficaria "%%1" "%%2".
Poderíamos colocar

CÓDIGO:
for /f "Tokens=1,2,3" %%a in (Arquivo.txt) do (echo %%b %%a %%c)

isso acarretaria em

CÓDIGO:
Parte1 Linha1 Teste1
Parte2 Linha2 Teste2
Parte3 Linha3 Teste3
Também da pra encurtar o processo tipo você quer colocar o "tokens" de 1 a 9 envez de colocar 1,2,3... vc pode usar da seguinte maneira
CÓDIGO:
for /f "tokens=1-9" %%a in (Arquivo.txt) do( echo %%a %%b %%c ...)
então acho que já da pra sacar pra que serve este complemento né ?
goto:eof

:delims
ele especifica o caractere delimitador (entre as palavras)
exemplo:
você tem o seguinte código chamado "teste.txt"

CÓDIGO:
Linha1-Parte1-Teste1
Linha2-Parte2-Teste2
Linha3-Parte3-Teste3
E quer separar cada camada, se usar só o "tokens" não ira pegar simplesmente pelo fato de as palavras estarem uma em contato com a outra tipo você colocaria
CÓDIGO:
for /f "tokens=1,2,3" %%a in (teste.txt) do (echo %%c %%b %%a)
Iria aparecer a mesma coisa do código original,agora usando o "delims" tipo isso aqui
CÓDIGO:
for /f "tokens=1,2,3 delims=-" %%a in (Arquivo.txt) do (echo %%c %%b %%a)
acarretaria em
CÓDIGO:
Teste1 Parte1 Linha1
Teste2 Parte2 Linha2
Teste3 Parte3 Linha3
Outro exemplo que acho melhor ainda de se entender e o da data olhem
CÓDIGO:
for /f "tokens=1,2,3 delims=/" %%a in ("%date%") do (echo Ano - %%c Mes - %%b Dia - %%a)
O resultado disso seria
CÓDIGO:
Ano - 2012 Mes - 08 Dia - 10
Um detalhe importante de ser ressaltado e que o caractere delims não foi igual ao do exemplo passado eu usei o '/' por que na data ele é utilizado para separar dia més e ano '10/08/2012'
goto:eof

:skip
No comando skip usaremos a #PodeUsar 
bom ele serve para pular linhas em sequencias veja

CÓDIGO:
for /f "tokens=* skip=1" %%a in (Arquivo.txt) do (echo %%a)

o Resultado disso seria

CÓDIGO:
Linha2 Parte2 Teste2
Linha3 Parte3 Teste3

como você pode ver pulou a primeira linha
obs - ele não e assim, tipo você coloca "skip=3" não pense que ele ira pular somente a terceira linha, e sim ira pular a primeira segunda e terceira. (e simplesmente isso o skip e bem simples na verdade )
goto:eof

:eol
Diferente do 'skip' o 'eol' serve para ignorar linhas com caracteres especificados por ele e não importa se estejam em ordem ou não. olha isso na pratica.
digamos que você tenha um arquivo chamado "texto.txt" com isso dentro

CÓDIGO:
boss-head
real madrid
baby
o melhor
black
time
e quer pular somente as linhas que tenham o caractere 'b' no inicio da frase
você colocaria esse comando

CÓDIGO:
for /f "tokens=* eol=b" %%a in (texto.txt) do (echo %%a)

resultaria nisso aqui

CÓDIGO:
real madrid
o melhor
time
Não tem nada pra acrescentar sobre este complemento
goto:eof

:usebackq
Esse comando serve para interpretar o conjunto de outro modo.
exemplo:Você tem um arquivo chamado de 'Ola galera.txt' e queria visualiza-lo no for se você colocar assim

CÓDIGO:
for /f "tokens=*" %%a in ("Ola galera.txt") do (echo %%a)
O prompt interpretaria como cadeia de caracteres simplesmente por que tem as [""] e iria mostrar "Ola galera.txt" na tela e não o conteúdo do arquivo então para mudar isso usa-se o "usebackq" ficando assim o código
CÓDIGO:
for /f "tokens=* usebackq" %%a in ("Ola galera.txt") do (echo %%a)
ai sim iria mostrar o conteúdo do arquivo

Obs - Tive que colocar aspas no conjunto por que o nome tem espaço e e a mesma coisa tipo quando você copia um arquivo se contiver espaços no meio do nome tem que colocar [""].
goto:eof


:Sets
* Alguns detalhes importantes
1 - Não importa a varável %%a %%b %%c tudo vai dar no mesmo
2 - No conjunto de ações não precisa ter () eu só coloco por organização
3 - O '%%Var' só e interpretado quando e salvo como ".bat" no prompt de comando utilize o '%Var'
4 - A grande sacada do for e a parte do 'delims' e 'tokens' aprendeu isso já e 70 % concluído
5 - O for ira economizar dezenas de linhas no seu código quando você sacar ele direito
6 - Você pode ver alguns exemplos do for clicando aqui
goto End

:End
Bom com isso concluímos o tutorial tenham a total certeza que tentei ser o mais claro possível
Aos que não entenderam pode me mandar a sua duvida em uma MP e tentearei soluciona-la
Aos Mods e as membros em geral podem me falar se me equivoquei em algum argumento ou coisas do tipo.
 
 
Autor: Hmenon do fórum Batch Satti
Retirado de :http://batchscript.blogspot.com.br/2012/12/aprenda-o-for-de-uma-vez-por-todas.html
Em : 02/10/2017
 

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.