none
Editar um txt via script .bat RRS feed

  • 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?


    quinta-feira, 6 de junho de 2013 13:19

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
    quinta-feira, 6 de junho de 2013 22:45
  • 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
    quarta-feira, 12 de junho de 2013 13:57
  • 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
    sexta-feira, 14 de junho de 2013 13:07
  • 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
    segunda-feira, 3 de outubro de 2016 13:00

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

    quinta-feira, 6 de junho de 2013 21:07
    Moderador
  • 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
    quinta-feira, 6 de junho de 2013 22:45
  • 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?

    sexta-feira, 7 de junho de 2013 14:38
  • SrTunes, esses caracteres devem constar no seu arquivo. Favor publicar seu arquivo de exemplo, porque nos testes que fiz (copei e colei o conteúdo postado) funcionou.

    Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br

    sexta-feira, 7 de junho de 2013 15:59
  • O arquivo ta assim:

    00000000000
    99999999999
    33333333333

    Copiei e colei!

    E o códiog eu copiei daqui e colei em um txt....
    segunda-feira, 10 de junho de 2013 15:46
  • Tem como você me explicar esse código?

    Tem um GOTO : EOF que não entendi pra onde vai....

    E o for também não entendi muito bem


    • Editado SrTunes segunda-feira, 10 de junho de 2013 15:48
    segunda-feira, 10 de junho de 2013 15:47
  • 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

    segunda-feira, 10 de junho de 2013 17:48
  • 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!!
    • Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 12:25
    • Não Marcado como Resposta SrTunes quarta-feira, 12 de junho de 2013 12:25
    quarta-feira, 12 de junho de 2013 12:23
  • SrTunes, existe mais de uma maneira de você fazer isso, segue duas opções:

    1. 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.
    2. 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

    quarta-feira, 12 de junho de 2013 12:44
  • 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!

    quarta-feira, 12 de junho de 2013 13:35
  • 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
    quarta-feira, 12 de junho de 2013 13:57
  • Aê!!! exatamente o find /V que eu queria!!!

    Coloquei find /V "Warning" e ja funcionou!

    Obrigado Nino!!

    quarta-feira, 12 de junho de 2013 14:10
  • SrTunes, que bom que resolveu. De nada.

    Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br

    quarta-feira, 12 de junho de 2013 15:31
  • 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
    sexta-feira, 14 de junho de 2013 13:07
  • 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

    sexta-feira, 14 de junho de 2013 13:16
  • Po Nino... rs.. obrigado pela explicação. Mas eu já sabia o que é o if, a minha duvida era qual a função do "NEQ" no if. O "NEQ" é o mesmo que o "diferente"?

    Obrigado novamente!!

    Valeu


    • Editado SrTunes sexta-feira, 14 de junho de 2013 14:45
    sexta-feira, 14 de junho de 2013 14:44
  • SrTunes, correto.

    "NEQ" = "diferente", "<>", "!=", "-ne" (depende da linguagem de programação).


    Att, Nino - Engº. de Projetos - http://www.TInoBar.com.br

    • Sugerido como Resposta Nino TI sexta-feira, 14 de junho de 2013 14:55
    sexta-feira, 14 de junho de 2013 14:55
  • 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!

    sexta-feira, 30 de setembro de 2016 18:52
  • 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

    sexta-feira, 30 de setembro de 2016 21:14
  • 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.

    segunda-feira, 3 de outubro de 2016 12:05
  • 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
    segunda-feira, 3 de outubro de 2016 13:00
  • 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,

    quarta-feira, 19 de abril de 2017 15:36
  • 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

      780  160   14.000000    5.000000     .000000     .040000     .000000
      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


    quarta-feira, 25 de dezembro de 2019 17:01