Achei uma bat para fazer replace de caracteres em arquivos muito grandes
O nome da bat é : BatchSubstitute.bat
Estou testando com um arquivo de 50 MB.
Visite : http://www.dostips.com/?t=batch.findandreplace
Description: | This batch allows string substitution in a text file. It parses each line of a text file for a particular string and replaces it with another string. I.e. To replace all occurrences of "Yellow Submarine" in "color.txt" with "uboot" and put the output on the screen run: BatchSubstitute.bat "Yellow Submarine" uboot color.txt Or type color.txt|BatchSubstitute.bat "Yellow Submarine" uboot Optionally pipe the output into a new file, i.e. BatchSubstitute.bat "Yellow Submarine" uboot color.txt>newfile.txt Or type color.txt|BatchSubstitute.bat "Yellow Submarine" uboot>newfile.txt Note: Due to the nature of the FOR command and string substitution, the following known restrictions apply:
|
echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
:$changed 20100115
:$source http://www.dostips.com
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
Olá,
ResponderExcluirEstou precisando criar uma bat para localizar uma string dentro de um arquivo. Tenho um arquivo chamado config.txt que contém várias informações e preciso localizar a string: "IP_server=" e pegar somente IP.
Poderia me ajudar??
Desde já agradeço muito!
Boa noite!
ExcluirCom o DOS o que vai conseguir fazer é
A bat
=======================================================
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
:: String to Find
:: File to be scanned
:: The new file name
find "%1" %2 > %3
================================================
execução na linha de comando do DOS
[nome da bat] "IP_server" [nome do arquivo para ser scaneado] [arquivo no qual serão gravados resultados]
Exemplo:
findstring.bat "IP_server" meuarquivo.txt novoarquivo.txt
--------------------------------------------------------
2a. Parte pegar somente o IP
Para fazer isso você precisaria
1 - Processar a linha com IP_server (feito anterioramente)
2 - Identificar a posição do "IP_server=" e guardar esta posição.
3 - Avançar na string até achar o espaço em branco.
4 - Guardar a posição do espaço em branco.
5 - Realizar algo como um substring da linha.
Veja talvez fazer isso com DOS não seja a melhor ideia.
Que tal você usar um VBS?
O DOS é bom para encontrar e substituir caracteres, mas para fazer o que você quer, creio que é impraticável.
Como curiosidade este é um script de replace de caracteres
========================================================
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
:$changed 20100115
:$source http://www.dostips.com
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
========================================================
Para fazer o que você quer, que realmente é muito simples, o script seria muito mais complexo. O que significa que o DOS não é a melhor ferramenta para fazer isso.
Espero ter ajudado.
Este comentário foi removido pelo autor.
ResponderExcluirEstou começando a mexer em DOS, não entendo para que serve o comando "setlocal enableextensions disabledelayedexpansion" poderia me dar uma ajuda??
ResponderExcluirOlá!!!!
ExcluirA explicação não explica muito se você não realizar os testes. Mas algo assim.
enabledelayeexpansion - É para o dos(cmd) reconhecer sintaxe! var! que acessa o valor atual da var. Essa é a primeira parte.
Segunda parte.
disabledelayedexpansion - "desliga" o !var! . Ou seja, ele entende o !var!, mas não acessa o conteúdo dela. O var vira um literal.
Essa técnica é para fazer scripts que geram scripts.
Se você tem algum experiência com SQLSERVER, acho que esse exemplo vai ajudar um pouco.
SELECT 'SELECT * FROM ' + name from sysobjects where xtype = 'u'
Fiz um select que cria vários selects. Isso é um script que cria outro script.
Se você está achando difícil, não se preocupe, é realmente difícil.
Espero ter ajudado.
Dica : se puder, procure outro caminho. Fazer scripts longos em DOS dá performance (às vezes) mas vai consumir bastante tempo de você.
PS: E tem também a versão de DOS que você está usando. Às vezes o DOS não reconhece de jeito nenhum.
Obrigado pelas dicas, sua explicação me deu uma boa ajuda.
ExcluirEu tenho uma aplicação gratuita que disponibilizo neste endereço que faz substituição de conteúdo de arquivos.
Excluirhttp://refactoringmachine.blogspot.com.br
Se precisar, baixe-a.
Se gostar, me doe U$1.
:D