Ir ao conteúdo
  • Cadastre-se

Outro Copiar determinado trecho de um arquivo txt via comando bat


Posts recomendados

Boa tarde Amigos,

Por gentileza, estou precisando criar um bat que faça a leitura de um arquivo de texto, no meu caso ele contem a versão de determinada aplicação.

Sendo assim, o bat precisa passar pelo arquivo txt, e copiar para outro txt ou até mesmo criar um arquivo com aquele "dado" copiado.

A linha é a 5ª e a posição é de 11 até 18.

Alguém pode me dar uma ideia de como fazer isso?

Até consegui algumas formas porém copia apenas a primeira linha.

set /p firstline=<file.txt SET
SELECAO=%firstline:~19,7%
ECHO %SELECAO%

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Ola Luiz tudo bem!

Então, é bem simples!
Você esta no caminha certo e falta pouco para concluir, vou colocar o comando e explicar!

set /p firstline=<C:\\ARQUIVO.TXT SET SELECAO1=%firstline:~0,100% SELECAO2=%firstline:~100,150% > C:\SALVA_ARQUIVO.TXT

Luiz quando você cria a variável "SELECAO1" e define até onde ela vai copiar o conteúdo que você deseja "~0,100%"

sendo assim você pode criar outra variável "SELECAO2" e definir o restante que você deseja copiar "~100,150%" , então neste caso ele copiar o restante, lembrando que o parâmetro "FIRSTLINE" é a posição de cada caractere no texto, se seu texto tem 400 caracteres contando com espaço, você define onde quer copiar, se vai da posição inicial  1 a posição final 30 e assim sucessivamente, e por ultimo para salvar é muito simples, Luiz basta que o amigo adicione no final da instrução o sinal maior que ">" e o caminho do arquivo "C:\ARQUIVO.TXT" fica assim >C:\ARQUIVO.TXT.

Obj: Luiz quando o amigo buscar um arquivo com um caminho especifico ponha com duas barras assim ele acha sem problema

desta forma 😄\\ARQUIVO_QUE_VAI_SER_LIDO.TXT, fica a dica! espero ter ajudado!

e para finalizar necessariamente você precisa informa SET depois do arquivo ou nomes nas variavas!

 

 

Link para o comentário
Compartilhar em outros sites

Ok, digamos que o texto onde está a versão esteja no desktop, se chame "texto.txt" e tenha o segunte conteúdo:

 


Olá meu nome é Fulano
Isso é um teste
Eu moro em Brasília
700 Eu gosto de goiaba 700
A versão é 10.4.38
blá blá blá
13:19 03/06/2019

 

Essa é a parte que você quer pegar: 10.4.38

 

Crie o seguinte bat para salver apenas a versão em um arquivo chamado versao.txt no desktop:

 


@echo off
for /f "delims= skip=4" %%a in (%userprofile%\desktop\texto.txt) do (
set versao=%%a
goto end
)
:end
echo %versao:~11,9% > "%userprofile%\desktop\versao.txt"

 

Para apenas exibir a versão na tela:

 


@echo off
for /f "delims= skip=4" %%a in (%userprofile%\desktop\texto.txt) do (
set versao=%%a
goto end
)
:end
echo A versao e: %versao:~11,9%

echo.

pause

 

 

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • mês depois...

Tá vamos novamente supor que temos um arquivo chamado texto.txt na área de trabalho que tenha o seguinte texto:

 


Olá meu nome é Fulano
Isso é um teste
Eu moro em Brasília
700 Eu gosto de goiaba 700
A versão é 10.4.38
blá blá blá
13:19 03/06/2019

 

E você quer copiar as linhas 5 e 6 para um arquivo chamado copia.txt também na área de trabalho:

 


@echo off
setlocal EnableDelayedExpansion
If exist "copia.txt" del copia.txt
set /a cont=0
for /f "delims= skip=4" %%a in (%userprofile%\desktop\texto.txt) do (
echo %%a>> copia.txt
set /a cont=!cont!+1
if "!cont!"=="2" goto end
)
:end

 

Digamos que você queira copiar da linha 5 em diante até o fim: (skip=4 quer dizer pular 4 linhas no arquivo)

 


@echo off
If exist "copia.txt" del copia.txt
for /f "delims= skip=4" %%a in (%userprofile%\desktop\texto.txt) do echo %%a>> copia.txt



 
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • 7 meses depois...

@ricardo_br, bom dia!
Preciso de sua ajuda em uma bat.

Tenho esse comando que precisa ser rodado por uma bat: Set-ADAccountExpiration -Identity nome.sobrenome -DateTime '19/02/2020 23:59:59'

Porém preciso que o nome.sobrenome e a data e hora seja lidos de outro arquivo txt para gerar essa bat.

 

Acho que eu vou ter que ter uma bat para poder gerar outra arquivo bat né?

 

Link para o comentário
Compartilhar em outros sites

Deixa eu ver se entendi.

 

Você tem um arquivo com algumas informações digamos teste01.txt:

------------------------------

Nome: João

Sobrenome: Silva

Idade: 30

-----------------------------

 

E ai quer executar isso (Que parece um comando powershell) dentro de um bat?

Set-ADAccountExpiration -Identity João.Silva -DateTime '19/02/2020 23:59:59'

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...

Boa noite,

estou ficando louco a procura de informação sobre este assunto.

Se tiverem a solução eu ficaria muitíssimo agradecido:

Preciso limpar arquivos de texto com com um .bat, de forma que fiquem apenas os números em cada uma das linhas.

O conteúdo dos arquivos são idênticos a este:

                <Chars Value="000"/>
                <Chars Value="111"/>
                <Chars Value="222"/>
                <Chars Value="333"/>
                <Chars Value="444"/>
                <Chars Value="555"/>
                <Chars Value="666"/>
                <Chars Value="777"/>
                <Chars Value="888"/>
                <Chars Value="999"/>
                <Chars Value="101"/>
                <Chars Value="202"/>
                <Chars Value="303"/>
                <Chars Value="404"/>
                <Chars Value="505"/>
                <Chars Value="606"/>
                <Chars Value="707"/>
                <Chars Value="808"/>
                <Chars Value="909"/>
                <Chars Value="009"/>
                <Chars Value="110"/>
                <Chars Value="210"/>
                <Chars Value="310"/>
                <Chars Value="410"/>
                <Chars Value="510"/>
                <Chars Value="610"/>
                <Chars Value="710"/>
                <Chars Value="810"/>
                <Chars Value="910"/>
                <Chars Value="010"/>

Preciso que fique assim:

000
111
222
333
444
555
666
777
888
999
101
202
303
404
505
606
707
808
909
009
110
210
310
410
510
610
710
810
910
010

Isto tem jeito?

Desde já obrigado.

 

 

Link para o comentário
Compartilhar em outros sites

@adrian Olá, no caso eu reparei que a parte dos números é sempre a parte que está entre aspas. No caso esse batch que eu fiz não pega praticamente os números mais a parte que está entre aspas em um texto e salva essa parte em um arquivo separado. Estou colocando em anexo.

Copiar-conteudo-entre-aspas.gif

 

Copiar Conteudo entre aspas.zip

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • 8 meses depois...

@ricardo_br Boa tarde amigo estou começando aprender programar em bat, gostei do seu script que tira os delimitadores e deixa apenas os número, mas confesso que não entendi o seu código usando "^" no for; não achei material na internet exemplificado o uso dele, teria como explicar a função desse "^" em cada etapa do for? ou mandar o link de onde eu posso estar estudando sobre ele?

desde já agradeço atenção.

Código mencionado:

"%Numeros%" (for /f usebackq^ tokens^=2^ delims^=^"^' %%a in ("%Texto%") do echo.%%a)

 

Link para o comentário
Compartilhar em outros sites

Circunflexo (^)  é o caractere de escape em batch, ele indica que o caractere seguinte logo após o ^ deve ser interpretado como um caractere comum e não algum caractere especial.

 

No caso está sendo usando aspas duplas e aspas simples para delimitar o arquivo de testo

 

Normalmente você poderia usar aspas duplas para definir os parâmetros do for algo como:

 

for /f "usebackq tokens=2 delims=,"

 

Mais como o próprio delimitador é uma aspa dupla o seguinte código iria gerar algum erro fazendo o batch achar que o usuário usou aspas demais porque o batch acha que as segundas aspas servem para fechar a lista de parâmetros do for e que as terceiras aspas estão perdidas ali....

 

for /f "usebackq tokens=2 delims=""

 

Ai tem que o usar o caractere de escape ^ para indicar que aquilo e texto e que de fato os delimitadores são aspas duplas e aspas simples e que as aspas não estão sendo usadas para abrir e fechar a lista de parâmetros do For...

 

for /f usebackq^ tokens^=2^ delims^=^"^'

 

No caso não são usadas aspas para indicar os parâmetros do for...

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Olá Ricardo, boa tarde!

Vi que você tem uma ótima experiência e resolvi em te chamar aqui para ver se consegue me ajudar em um script no PS. 

Estou automatizando um AD, onde ele compara um arquivo TXT e verifica a data do arquivo se é a mesma data de hoje, caso seja, ele vai e desabilita a conta. 
Porém, eu preciso que nessa comparação da data, já pegue a linha inteira dessa comparação e encaminhe para outro arquivo txt, excluindo essa linha. Segue o formado do txt:

Nome,usuario,datainic
teste1,teste1,06/06/2022
teste2,teste2,07/07/2022

Estou usando o comando If ($_.datainic -eq $Date) para fazer a comparação da data com a variável Date. Consegue me ajudar?


Agradeço um retorno.
 

Link para o comentário
Compartilhar em outros sites

@ricardo_br Cara, se você der uma luz só.... Pode ser em batch, ai eu me viro. 

Estou tentando dessas forma, mas eu vi que tem um jeito de alterar pelo menos a data que está o desligamento, para OK. Exemplo:

Nome,usuario,datainic
teste1,teste1,06/06/2022
teste2,teste2,07/07/2022

------

Nome,usuario,datainic
teste1,teste1,OK
teste2,teste2,OK

Será que é possível?

Link para o comentário
Compartilhar em outros sites

Deixa eu ver se entendi digamos que esse seja o "arquivo 01.txt":

Nome,usuario,datainic
teste1,teste1,06/06/2022
teste2,teste2,07/07/2022

 

Se alguma dessas datas for igual a data de hoje "06/06/2022" deve copiar essa linha para "arquivo 02.txt" e apagar a linha de "arquivo 01.txt" ficando o resulatado assim:

 

arquivo 01.txt:

Nome,usuario,datainic
teste2,teste2,07/07/2022

 

arquivo 02.txt:

Nome,usuario,datainic
teste1,teste1,06/06/2022

 

É isso mesmo?

Link para o comentário
Compartilhar em outros sites

@ricardo_br Olá Ricardo, bom dia!

Isso mesmo, essa seria a analogia.
Eu consegui fazer um script onde altera a data de hoje para o "OK", para que eu entenda que o usuário já foi desabilitado, porém não quero excluir essa linha manual.

Pegar essa linha que seja igual data de hoje, jogar para o arquivo 02.txt e excluir do arquivo 01.txt.

Link para o comentário
Compartilhar em outros sites

Em batch ficaria algo assim:

 

@echo off

set Arquivo01=arquivo 01.txt
set Arquivo02=arquivo 02.txt
set Indice=Nome,usuario,datainic

type "%Arquivo01%" | find /i "%Date%" && call :Alterar
exit


:Alterar
>>"%Arquivo01%.tmp" echo %Indice%
>>"%Arquivo02%" echo %Indice%
for /f "skip=1 tokens=1-3 usebackq Delims=," %%a in ("%Arquivo01%") do if "%%c"=="%date%" (
                                                                                           >>"%Arquivo02%" echo %%a,%%b,%%c
                                                                                          ) else (
                                                                                                  >>"%Arquivo01%.tmp" echo %%a,%%b,%%c
                                                                                                 )
del /q "%Arquivo01%"
ren "%Arquivo01%.tmp" "%Arquivo01%"
goto :EOF
                                                                                                  

 

Funciona assim, primeiro verifico se a data atual existe dentro de "arquivo 01.txt" e caso não o bat já é finalizado sem mexer em nada. Caso a data existe e gravado um arquivo temporário com todas as linhas menos a linha que contem a data atual. Ao final o "arquivo 01.txt" é apagado e o arquivo temporário é renomeado para "arquivo 01.txt".

 

oErkCGL.gif

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br Ricardo, bom dia!

Sensacional cara, fiz os testes e deu certo. Agora vou procurar um jeito para migrar para o PS, para ficar em 1 script só. Caso eu consiga resolver, mando aqui. 

Mais uma vez, muito obrigado pelo apoio e ajuda. 

@ricardo_br Outra ponto aqui. 

Ao rodar o arquivo novamente, ele está trazendo o índice novamente, ex:

Nome,usuario,datainic
teste1,teste1,06/06/2022
Nome,usuario,datainic
teste1,teste1,06/06/2022

Esse índice já vai estar no arquivo, tem como trazer somente os dados da linha? Sem o Nome,usuario,datainic?


Att.

Link para o comentário
Compartilhar em outros sites

@Rafael_Trevisan_2022 Pensei que o segundo arquivo ia ser usado apenas 1 vez...veja agora:

 

@echo off

set Arquivo01=arquivo 01.txt
set Arquivo02=arquivo 02.txt
set Indice=Nome,usuario,datainic

type "%Arquivo01%" | find /i "%Date%" && call :Alterar
pause
exit


:Alterar
if not exist "%Arquivo02%" >>"%Arquivo02%" echo %Indice%
for /f "skip=1 tokens=1-3 usebackq Delims=," %%a in ("%Arquivo01%") do if "%%c"=="%date%" (
                                                                                           >>"%Arquivo02%" echo %%a,%%b,%%c
                                                                                          ) else (
                                                                                           >>"%Arquivo01%.tmp" echo %%a,%%b,%%c
                                                                                          )
del /q "%Arquivo01%"
ren "%Arquivo01%.tmp" "%Arquivo01%"
goto :EOF
                                                                                                  

 

Vou perguntar meu amigo ItWasn'tMe acho que ele sabe como fazer isso em Powershell....

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!