Usuário com melhor resposta
Editar um txt via script .bat

Pergunta
-
Olá colegas,
Estou precisando criar um script .bat para alterar um arquivo txt.
Seguinte:
Tenho um arquivo txt que esta assim por exemplo:
2312341241 23123123 1231312313 asdadafefr
ele tem espaços também no final de cada linha.
Preciso deixar tudo em uma linha e sem espaços, assim:
2312341241231231231231312313asdadafefr
Como faço um script em .bat para fazer isso?
- Editado Fábio JrModerator sábado, 8 de junho de 2013 02:33 Erro Título
Respostas
-
SrTunes, segue opção em batch:
@echo off SET strLinha= for /F "TOKENS=1 DELIMS= " %%i in (t.txt) do CALL :linha %%i echo %strLinha% goto :END ::++++++++++++++++++++++ :linha ::++++++++++++++++++++++ SET strLinha=%strLinha%%1 goto :EOF ::++++++++++++++++++++++ :END ::++++++++++++++++++++++ pause
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Sugerido como Resposta Fábio JrModerator quarta-feira, 12 de junho de 2013 00:17
- Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 12:25
-
SrTunes, você pode substituir o for do script por:
for /F "TOKENS=1 DELIMS= " %%i in ('comando_SQL ^| find /V "Warning: Using a password on the command line interface can be insecure"') do CALL :linha %%i
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 14:10
-
Oi Nino! Beleza?
Deixa eu te fazer mais uma pergunta?
nessa função:
if %iCount% NEQ 0 ( SET strLinha=%strLinha%%1 )
O que é o NEQ? Qual a função dele?
Se eu fosse ignorar as duas primeiras linha? Como seria?
Obrigado!
- Marcado como Resposta SrTunes sexta-feira, 14 de junho de 2013 14:51
-
SrTunes,
O último for retira o " " (espaço) do final da string e seta a variável input novamente até não ter mais espaços. Lembro que a string está limitada ao tamanho de 100 caracteres.
Segue help do FOR /L:
O script acima foi um exemplo para você montar conforme sua necessidade, portanto, ao invés de setar a variável input via prompt, você faz um FOR no arquivo de entrada para chamar a função :trim e faz o echo para dentro de outro arquivo. Exemplo do for para ler arquivo:
for /f %%i in (teste.txt) do echo %%i
Atenciosamente,
Nino
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Marcado como Resposta SrTunes segunda-feira, 3 de outubro de 2016 14:08
Todas as Respostas
-
Utilzando em .BAT mas deve dar um pouco de trabalho.
Tente com PowerShell esta única linha:
[string]::join("", (Get-Content c:\temp\teste.txt | % {$_.trim()}) ) | Out-File c:\temp\teste2.txt
Basta você alterar o arquivo de origem e no final do comando o arquivo de destino (podem ser o mesmo)
Fábio de Paula Junior
-
SrTunes, segue opção em batch:
@echo off SET strLinha= for /F "TOKENS=1 DELIMS= " %%i in (t.txt) do CALL :linha %%i echo %strLinha% goto :END ::++++++++++++++++++++++ :linha ::++++++++++++++++++++++ SET strLinha=%strLinha%%1 goto :EOF ::++++++++++++++++++++++ :END ::++++++++++++++++++++++ pause
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Sugerido como Resposta Fábio JrModerator quarta-feira, 12 de junho de 2013 00:17
- Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 12:25
-
Beleza! Funcionou, mas ele coloca uns caracteres indesejados no inicio... o que pode ser?
tipo:
O arquivo tem:
00000000000 99999999999 33333333333
E quando executo o bat ele mostra assim:
´╗┐000000000009999999999933333333333
De onde ele traz esses caracteres no inicio?
-
-
-
-
SrTunes, o for serve para buscar cada linha do seu arquivo e como atributo chamar a função :linha, o goto :EOF da função é para continuar no loop for até que chegue o fim do arquivo lido.
Segue imagem com meu teste. Imagino que seu arquivo tenha algum caractere 'invisível' e que no echo está saindo:
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Sugerido como Resposta Matheus Kamphorst segunda-feira, 10 de junho de 2013 18:39
-
Valeu Nino!!! Eu reescrevi os dois arquivos e funcionou perfeitamente!
Só mais uma ultima pergunta, que não tem a ver diretamente com esse script, quando digito um comando no CMD ele me retorna duas linhas, a primeira é um aviso e a segunda é o que interessa, o que posso colocar no comando para ignorar a primeira linha?
Obrigado pela ajuda!! -
SrTunes, existe mais de uma maneira de você fazer isso, segue duas opções:
- Se você sabe o conteúdo da primeira linha e garante que não terá esse mesmo conteúdo nas linhas subsequentes, você pode utilizar o comando find.
- Se você quer simplesmente eliminar a primeira linha independente de seu conteúdo, você pode utilizar um contador (variável).
OPÇÃO 1
@echo off SET strLinha= for /F "TOKENS=1 DELIMS= " %%i in ('type t.txt ^| find /I "texto desejado"') do CALL :linha %%i echo %strLinha% goto :END ::++++++++++++++++++++++ :linha ::++++++++++++++++++++++ SET strLinha=%strLinha%%1 goto :EOF ::++++++++++++++++++++++ :END ::++++++++++++++++++++++ pause
OPÇÃO 2
@echo off SET strLinha= SET /a iCount = 0 for /F "TOKENS=1 DELIMS= " %%i in (t.txt) do CALL :linha %%i echo %strLinha% goto :END ::++++++++++++++++++++++ :linha ::++++++++++++++++++++++ if %iCount% NEQ 0 ( SET strLinha=%strLinha%%1 ) SET /a iCount += 1 goto :EOF ::++++++++++++++++++++++ :END ::++++++++++++++++++++++ pause
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
-
Beleza! Então, seguinte. No script fica uma beleza! Mas o que eu to querendo é um pouco diferente agora:
Vou explicar melhor:
no CMD mesmo, sem utilizar arquivo .bat eu escrevo um comando para mostrar o tamanho de um banco de dados e nesse comando eu tenho que digitar a senha do banco, quando dou "enter" antes dele exibir o tamanho do banco de dados ele me da um aviso:
Warning: Using a password on the command line interface can be insecure.
e logo depois me mostra o tamanho do banco.
O que posso colocar no comando que eu dei, para ignorar o aviso, ou ignorar a primeira linha?
Obrigado novamente Nino! Você esta me ajudando muito!
-
SrTunes, você pode substituir o for do script por:
for /F "TOKENS=1 DELIMS= " %%i in ('comando_SQL ^| find /V "Warning: Using a password on the command line interface can be insecure"') do CALL :linha %%i
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 14:10
-
-
-
Oi Nino! Beleza?
Deixa eu te fazer mais uma pergunta?
nessa função:
if %iCount% NEQ 0 ( SET strLinha=%strLinha%%1 )
O que é o NEQ? Qual a função dele?
Se eu fosse ignorar as duas primeiras linha? Como seria?
Obrigado!
- Marcado como Resposta SrTunes sexta-feira, 14 de junho de 2013 14:51
-
SrTunes, em português o 'if' significa: Se Variável_iCount Não_For_Igual_À 0 então faça o que está entre '(' ... ')'
Para saber mais detalhes do if e condições, abre o prompt de comando e digita if /?.
No caso de ignorar as duas primeiras linhas, você pode utilizar GTR (Maior que): if %iCount% GTR 1 ( ... )
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
-
-
-
Boa tarde Nino!
Pode me ajudar mais uma vez?
como ja faz um tempo que não mexo com scripts bat, esqueci de varias funções.
Sobre o script que você me passou acima, tem como refaze-lo mas apenas para tirar os espaços em branco que estão a direita de cada linha?
Muito obrigado!
-
STunes,
Isso deve resolver:
@echo off setlocal enabledelayedexpansion set /p input=: echo."%input%" for /f "tokens=* delims= " %%a in ("%input%") do set input=%%a for /l %%a in (1,1,100) do if "!input:~-1!"==" " set input=!input:~0,-1! echo."%input%" pause
Atenciosamente,
Nino
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
-
Oi Nino,
bixo, tentei entender o script, mas acho que desaprendi. rs
Seguinte,
tenho o arquivo t.txt com a sequência abaixo:
0000000000 1111111111 2222222222
Todas as linhas contém 5 espaços a direita. Preciso do arquivo sem os espaços a direita.
Esse script que me passou, não sei como inserir o arquivo "t.txt".
Pelo que entendi do script, você cria uma variavel vazia com nome de "input" e depois exibe ela com echo. Ai você pega e coloca a variavel dentro de um for, onde o delimitador é o espaço e insere o resultado dentro da variavel novamente (isso vai incrementado?). O for de baixo não entedi... :(
Pode me ajudar mais uma vez?
Muito obrigado pelas ajudas.
-
SrTunes,
O último for retira o " " (espaço) do final da string e seta a variável input novamente até não ter mais espaços. Lembro que a string está limitada ao tamanho de 100 caracteres.
Segue help do FOR /L:
O script acima foi um exemplo para você montar conforme sua necessidade, portanto, ao invés de setar a variável input via prompt, você faz um FOR no arquivo de entrada para chamar a função :trim e faz o echo para dentro de outro arquivo. Exemplo do for para ler arquivo:
for /f %%i in (teste.txt) do echo %%i
Atenciosamente,
Nino
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
- Marcado como Resposta SrTunes segunda-feira, 3 de outubro de 2016 14:08
-
Desculpa ressuscitar o topico, mas estou precisando de uma ajuda nesse sentido....
tem como alterar ou criar um novo código para acrescentar caracteres?
Ex. Eu tenho um arquivo .txt e queria colocar no final de todas as linhas uma vírgula.
exemplo:
123
456
789
Novo arquivo
123,
456,
789,
-
SrTunes, você pode substituir o for do script por:
for /F "TOKENS=1 DELIMS= " %%i in ('comando_SQL ^| find /V "Warning: Using a password on the command line interface can be insecure"') do CALL :linha %%i
Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br
Olá Nino, se puder me ajudar no assunto abaixo eu agradeço
procurei no site algum comando via bat que consiga substituir a linha 791
de:
154 0.000000 538.0000 2.0000 0.000000
para
154 2.000000 538.0000 2.0000 4.000000
segue abaixo a estrutura modelo dos arquivos com os dados a substituir (0s 3 primeiros caracteres indica o numero da linha, então o valor pode variar de arquivo para arquivo)
Agradeço a ajuda
781 160 15.000000 5.000000 .000000 .040000 .000000
782 160 150.000000 99.000000 .000000 .004000 .000000
783 160 151.000000 99.000000 .000000 .004000 .000000
784 160 160.000000 99.000000 .000000 .004000 .000000
785 160 161.000000 99.000000 .000000 .004000 .000000
786 160 83.000000 99.000000 0.000000 0.050000 0.000000
787 160 83.0000 1.0000 0.0000 0.0200 0.0000
788 160 83.0000 2.0000 0.0000 0.0200 0.0000
789 165 1.0000 1.0000 5.0000
790 165 2.0000 1.0000 5.0000
791 154 0.000000 538.0000 2.0000 0.000000