Autor: Hmenon do fórum Batch Satti
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 atras, 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.
A 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 vará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
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)
- CÓDIGO:
Linha1 Parte1
Linha2 Parte2
Linha3 Parte3
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
- CÓDIGO:
for /f "tokens=1-9" %%a in (Arquivo.txt) do( echo %%a %%b %%c ...)
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
- CÓDIGO:
for /f "tokens=1,2,3" %%a in (teste.txt) do (echo %%c %%b %%a)
- CÓDIGO:
for /f "tokens=1,2,3 delims=-" %%a in (Arquivo.txt) do (echo %%c %%b %%a)
- CÓDIGO:
Teste1 Parte1 Linha1
Teste2 Parte2 Linha2
Teste3 Parte3 Linha3
- CÓDIGO:
for /f "tokens=1,2,3 delims=/" %%a in ("%date%") do (echo Ano - %%c Mes - %%b Dia - %%a)
- CÓDIGO:
Ano - 2012 Mes - 08 Dia - 10
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
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
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)
- CÓDIGO:
for /f "tokens=* usebackq" %%a in ("Ola galera.txt") do (echo %%a)
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
A todos um abraço de Agamenon e fiquem com DEUS.
Att. Hemnon
Hey.. sabe eu estava testando algumas novas TAGS do Google e vim parar aqui.. eu sou o Agamenon do texto aí em cima, fui eu que escrevi este tutorial, fiquei até feliz em ver que você postou aqui no seu BLOG, na verdade fiz ele para ajudar as pessoas a entender o "tão temido for" e tirar algumas dúvidas. E é isso aí cara quanto mais pessoas você poder atrair para a programação melhor, e se for especificamente pro Batch-Script melhor ainda.
ResponderExcluirset "autor=RÔMULO" & REM Sucesso ao seu BLOG
PS: Sabe fiquei realmente contente, o que me deixou mais ainda foi o %autor% ter a decência de colocar os devidos créditos à mim, muitos postariam por aí como seus e levariam toda a "glória" (sei que é só um tutorial mas a lógica é a mesma, ninguém gosta de ser plagiado e copiado). Então ao %autor% que divulgue o Batch-Script assim como eu, leve às pessoas esse novo mundo, que sem dúvida nenhuma é apaixonante.
PS: Sabe o Batch-Satti é um ótimo fórum, sem dúvida nenhuma é o melhor daqui do brasil(quem sabe até da américa latina), aprendi muito lá e qualquer script que eu crio e posto por aí eu deixo créditos ao site e divulgo.
Att. Hmenon
ExcluirValeu pelo comentário .. foi um Ctrl+c ctrl+v rs, mas sempre que tiro algo de lá ou outro lugar coloco o autor e fonte.
Todo conteúdo aqui disponível é encontrado na internet, só algumas coisas eu fiz...
:vlw
T+
goto vlw
Cara Daew
ResponderExcluirParabens pelo seu blog
eu criei um Programa em .BAT
Queria saber se vc pode me dar uma
Força e divulgar ele aew
PendriveCopy
dai te mando o Link de videos
Posso sim.
ExcluirExcelente, meus sinceros agradecimentos. Parabéns pela iniciativa.
ResponderExcluirValeu CARA PARABENS era o que estava precisando para desenvolver meu BATinho, Obrigado.
ResponderExcluirMuito bom, esclareceu varias duvidas.
ResponderExcluirObrigado por compartilhar, muito bem explicado e comentado.
ResponderExcluirParabéns! Me ajudou muito.
Ótimo esse ensinamento. Parabéns! Gostaria muito de uma ajuda. Quer saber como pegar um arquivo com uma extenção, ex: "txt" em uma pasta e jogar em outra. Tipo isso, mas não funcionou com txt dentro do for. só quando coloco "doc.txt". Quero localizar por extenção e enviar. for %x in (doc.txt) do cd C:\Users\PC-host\Documents | dir /s /b %x | robocopy C:\Users\PC-host\Documents\%x C:\Users\PC-host\Downloads\%x
ResponderExcluirAlguem poderia me ajudar?
ResponderExcluirExemplo:
DAC005789.JPG
DBX46956565.JPG
DXX78988.JPG
DAC005789_tn.JPG
DBX46956565_tn.JPG
DXX78988_tn.JPG
Preciso copiar ou mover, apenas os que tenham "_tn"
Obrigado
Gracias, después de tanto buscar por fin encontré una buena explicación.
ResponderExcluirMuito bom esse tutorial, foi de grande ajuda.
ResponderExcluir