Ms-Dos - Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

 
Vista:
sin imagen de perfil

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 27/07/2012 01:41:32
Amigos.

Por favor, alguien pueda ayudarme en este tema, yo no conosco mucho de DOS pero si he podido ver que se puede hacer lo que necesito con find.

Les explico.

Tengo un archivo TXT que esta estructurado por 20 columnas y 200 registros, una de sus columnas contiene el campo codigo del cliente.

lo que necesito elaborar en DOS es un bat que primero me pida ingresar el codigo de cliente para que luego con un enter recorra los 200 registros y solo copie los registros para postiormente llevarlos a un txt nuevo llamado clientes_separados.txt.

Por favor, de ante mano gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 29/07/2012 02:29:52
He encontrado algo parecido dentro del foro que pense me iba ayudar.
Sin embargo cuando modifique agregandole el codigo de cliente "4545454", el DOS me da un mensaje que dice :
"la sintaxis del comando no es correcta" y "no se esperaba | en este momento"

@echo OFF
for /f "tokens=*" %%A in (clientes.txt) do (ECHO %%A |findstr /I /V "4545454")>>ACTIVOS.txt

Mi archivo clientes.txt tiene esta estructura, de la cual deveria de copiar solo 2 filas por el cod_cliente "4545454".

2012.07.26
---------------------------------------
---------------------------------------
| FECHA CONTABIL|CODIGO CLIENTE|CALLES|
---------------------------------------
| 2012.07.26 |4545455 |SUR |
| 2012.07.26 |65875412 |NORT |
| 2012.07.26 |98654872 |ESTE |
| 2012.07.26 |4545454 |OEST |
| 2012.07.26 |98566555 |NORT |
| 2012.07.26 |4545454 |SUR |
---------------------------------------
|* | | |
---------------------------------------

La pagina en la que vi este codigo de DOS es:
http://www.lawebdelprogramador.com/foros/Ms-Dos/1322404-Eliminar_registros_por_un_condicion_en_un_archivo_txt_desde_un_bat.html

Por favor, estare atentos a su colaboracion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (811 intervenciones) el 31/07/2012 07:05:56
Si entiendo bien lo que deseas hacer es algo asi:

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FIND "%codi%" cliente.txt >Activos.txt


Para ser un poco mas precisos puedes poner los sepadadores de campo para ajustar la busquera:

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FIND "|%codi%|" cliente.txt >Activos.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (811 intervenciones) el 31/07/2012 11:14:07
En los ejemplos hay un pequeño error.

Es mejor usar el FINDSTR

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "%codi%" cliente.txt >Activos.txt


1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "|%codi%|" cliente.txt >Activos.txt


NOTA - 1: Si solo son numeros no necesitas el /I

NOTA - 2: Si pones en /V copia los registro que NO tienen el codigo.


Ayuda del FINDSTR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
C:\LWP>findstr /?
Busca cadenas en los archivos.
 
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:archivo]
   [/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color] [/
OFF[LINE]]
   [cadenas] [[unidad:][ruta]nombredearchivo[ ...]]
 
  /B        Hace coincidir los modelos si están al principio de la línea.
  /E        Hace coincidir los modelos si están al final de la línea.
  /L        Literalmente utiliza cadenas de búsqueda.
  /R        Utiliza cadenas de búsqueda como expresiones regulares.
  /S        Busca archivos que coinciden en el directorio actual y en todos
            los subdirectorios.
  /I        Especifica que la búsqueda no distingue mayúsculas de minúsculas.
  /X        Imprime líneas que coinciden con exactitud.
  /V        Sólo imprime líneas que no contienen una correspondencia.
  /N        Imprime el número de la línea antes de la línea que coincide.
  /M        Sólo imprime el nombre de archivo si el archivo contiene una
            correspondencia.
  /O        Imprime un carácter de desplazamiento antes de las líneas que
            coinciden.
  /P        Omite archivos con caracteres que no son imprimibles
  /OFFLINE  No omite archivos con el atributo "sin conexión" establecido.
  /A:attr   Especifica atributos de color con dos dígitos hexadecimales. Ver
            "color /?"
  /F:archivo  Lee la lista de archivos desde el archivo especificado
            (/ significa consola).
  /C:cadena   Utiliza una cadena especificada como una búsqueda de cadena
            literal.
  /G:archivo  Toma la búsqueda de archivos desde el archivo especificado
            (/ significa consola).
  /D:dir    Busca un signo de punto y coma de la lista delimitada de
            directorios
  cadenas   Texto que se debe buscar.
  [unidad:][ruta]nombredearchivo
            Especifica un archivo o  archivos que buscar.
 
Utiliza espacios para separar múltiples cadenas de búsqueda a no ser que
el argumento lleve un prefijo con /C.  Por ejemplo, 'FINDSTR "qué tal" x.y'
busca "qué" o "tal" en el archivo x.y.  'FINDSTR /C:"qué tal" x.y' busca
"qué tal" en el archivo x.y.
 
Expresión regular de referencia rápida:
  .        Comodín: cualquier carácter
  *        Repetir: cero o más ocurrencias de un carácter previo o de clase
  ^        Posición de línea: comienzo de la línea
  $        Posición de línea: fin de línea
  [clase]  Clase de carácter: cualquier carácter en la serie
  [^class] Clase inversa: cualquier carácter que no esté en la serie
  [x-y]    Intervalo: cualquier carácter que esté dentro del intervalo
           especificado
  \x       Escape: uso literal de un metacarácter x
  \<xyz    Posición de palabra: principio de palabra
  xyz\>    Posición de palabra: fin de palabra
 
Para obtener una información más completa sobre expresiones regulares de
FINDSTR referirse al Comando de referencia Command en línea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 02/08/2012 00:23:54
Exelente, Antoni me salvaste..

@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "%codi%" cliente.txt >Activos.txt

Si no es mucho pedir, aunque en verdad ya me ayudaste mucho; existira la forma de que cuando se copie al archivo.txt se pueda modificar la delimitacion a entre comillas.

Asi:

| 2012.07.26 |4545455 |SUR |


" 2012.07.26 "4545455 "SUR "

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (811 intervenciones) el 02/08/2012 06:47:13
El MS-DOS es un mal gestor de ficheros, no malo no es la palabra correcta, malisimo se acerca un poco mejor.

No existe ningun comando nativo en para reemplazar caracteres que yo sepa.

En unix hay un comando que sirve para esto y se llama sed

Sintaxis

1
sed "s/bad/good/g" Archivo-1.txt >Archivo-2.txt


Busca en google si existe un sed.exe o sed.com para MS-DOS

Hay gente que ha realizados programas para MS-DOS que son copias de comandos UNIX que estan mejor que muchos de los comandos de Microsoft.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A. V. T.
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por A. V. T. (9 intervenciones) el 03/04/2019 21:04:23
es batch lo modifique para que realizara susticion de caracter pero con los especiales como | no me funciona. aqui les dejo por si les sirve
cuando hacen la comparacion con Linea:~%PosX%,1 ese uno indica la cantidad de caracter que toma asi que si quieren tomar mas de uno deben de modificarlos.

Codigo original:
http://batchcoder.blogspot.com/2015/10/borrado-de-caracter-sobre-texto-plano.html


Codigo modificado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
::@Echo off & Cls
Setlocal EnableDelayedExpansion
Mode Con Cols=100 Lines=25
Title BMCTP v0.1
 
REM ~~~~ Verificar o Crear ~~~~
	:: Verifica si existe el directorio de archivos temporales creado por el programa
	:: En caso que no exista, lo crea
	:: Redirige al inicio del script
If Exist "%TMP%\BMCTP" (
	Goto Inicio
	) Else (
	MD "%TMP%\BMCTP"
	Goto Inicio
	)
 
REM ~~~~ Configuracion de ruta ~~~~
	:: Coloca la ruta desde donde fue abierto el programa coo ruta por defecto
	:: Pregunta al usuario si desea cambiar la ruta
	:: Redirige al cambio de ruta en caso de solicitarlo
:Inicio
Set Ruta=%CD%
Echo.
Echo. & Echo =======================================================
Echo Su ruta actual es %Ruta%, desea cambiarla? (Si/No):
Choice /C sn /N
	If "%ErrorLevel%" == "1" Call:Nueva_Ruta
	If "%ErrorLevel%" == "2" Echo La ruta se mantiene por defecto...
CD %Ruta%
 
REM ~~~~ Nombre del archivo ~~~~
	:: Pregunta el nombre del archivo a ser modificado
	:: Se comprueba la existencia de dicho archivo
	:: Si todo sale bien redirige a Backup
:Nombre_Texto
Echo. & Echo =======================================================
Echo Escriba el nombre del archivo a modificar (Solo archivos de texto plano "txt"):
Set /P "Archivo=>"
 
If Not Exist "%Archivo%.txt" (
 
	Echo No se ha encontrado el archivo solicitado, intente nuevamente.
	Goto Nombre_Texto
	) Else (
 
	Echo Archivo encontrado.
	Goto Backup
	)
 
REM ~~~~ Crear un backup ~~~~
	:: Por seguridad se crea un backup del archivo a modificar antes de empezar
	:: No permite seguir en caso que no se realice correctamente el backup
	:: Redirige a la seccion de Caracter
:Backup
Copy /Y "%Ruta%\%Archivo%.txt" "%TMP%\BMCTP\%Archivo%_Backup.txt" >nul
If Exist "%TMP%\BMCTP\%Archivo%_Backup.txt" (
	Echo. & Echo =======================================================
	Echo Backup realizado con exito.
	>Nul Ping -n 3 Localhost & Goto Caracter
	) Else (
	Echo Error al hacer Backup del archivo.
	Pause>nul
	Exit
	)
 
:Caracter
Echo.
Echo. & Echo =======================================================
Echo Escriba el caracter a borrar del texto:
Set /P Caracter=^>
Echo Borrar %caracter% por----:
Set /P Cambio=^>
If "%Caracter%" == "" Echo Por favor no intente ingresar valores nulos... & Echo. & Goto Caracter
 >Nul Ping -n 1 Localhost
Echo =======================================================
Echo Ok... & Echo.
Echo Buscando... & Echo.
Echo Borrando el caracter "%Caracter%" del archivo...
Echo.
Echo (Esto puede demorar, dependiendo del archivo)
Echo =======================================================
 
:Mod
Set PosX=0
For /F "Usebackq Tokens=*" %%a IN ("%Ruta%\%Archivo%.txt") Do (
	Set Linea=%%a
	Call:Buscador
	Set "LineaNueva="
	)
Goto Aprobacion
 
:Buscador
pause
If Not "%Caracter%" == "!Linea:~%PosX%,1!" (
	If "!Linea:~%PosX%,1!" == "" (
		Set PosX=0
		Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
		Goto:Eof
		)
Set "LineaNueva=%LineaNueva%!Linea:~%PosX%,1!"
 
	Set /A PosX+=1
	Goto Buscador
	) Else (
 
	Set "LineaNueva=%LineaNueva%%cambio%

	If "!Linea:~%PosX%,1!" == "" (
		Set PosX=0
		Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
		Goto:Eof
		)
	Set /A PosX+=1
	Goto Buscador
	)
 
:Aprobacion
Echo.
Echo Modificacion lista, desea revisar el archivo? (Si/No)
Choice /C sn /N
If "%ErrorLevel%" == "1" "%TMP%\BMCTP\Nuevo_%Archivo%.txt" && Goto Fin
If "%ErrorLevel%" == "2" Goto Fin
 
:Fin
 Echo.
Copy /Y "%TMP%\BMCTP\Nuevo_%Archivo%.txt" "%Ruta%\Nuevo_%Archivo%.txt" >nul
>Nul Ping -n 1 Localhost
Del /Q "%TMP%\BMCTP" >nul
Echo El archivo modificado se encuentra en :	"%Ruta%".
Echo El archivo Back-Up se encuentra en :	"%TMP%\BMCTP".
Echo. & Echo Hemos terminado!
Echo. & Echo Saliendo...
>Nul Ping -n 10 Localhost & Exit
 
:Nueva_Ruta
Echo.
Set /P Ruta=Escriba la ruta nueva:
If Not Exist "%Ruta%" (
 
	Echo Error. La ruta no existe o fue mal escrita, por favor intente de nuevo...
	Goto Nueva_Ruta
	) Else (
 
	Echo La ruta ha sido cambiada!
	Goto:Eof
	)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Gabriel (2 intervenciones) el 11/07/2018 00:15:31
Estimado agradecer por tremendo aporte, me gustaría pedir una ayuda, me solicitan buscar en un archivo con una lista de nombres todos aquellos que tengan la u y la o, esto con expreciones regulares, para ello modele los siguiente en BAT.

type patos.txt | findstr "u.o"

el problema que me arroja solo los nombres tiene la uXo como, hugo, rulo
pero los nombres como uXXXXo asi como: humberto juliano no aparecen una ayuda por favor con el ejercicios

de ante mano Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Andrés (1 intervención) el 25/11/2019 23:22:04
Estimado. Su ayuda, quiero buscar un texto en un archivo, si es texto si está ques e salga del programa y si el texto no está que escriba el texto deseado.

Si existe el texto
Salir
Si no existe el texto
Escribir texto

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Allan (1 intervención) el 05/05/2013 05:46:05
Y como se podria hacer esto mismo pero leyendo todos los archivos que se encuentren en una carpeta determinada y a cada uno lo cree en otro archivo con el mismo nombre del original pero en otra carpeta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Victor (1 intervención) el 09/05/2017 23:47:00
Hola Alan... Creo entender que lo que necesitabas es lo mismo que yo?
Yo tengo un sistema el cual me genera un .txt con datos de afiliados, dni y varios datos mas, en el cual yo necesitaria sacar de alguna manera para poder copiar y pegar en otro sistema creado por mi, y asi poder comparar los codigos.
Lo que necesito es la manera de poder copiar una fila del .txt donde todos los codigos se encuentran en la misma fila.
Con este .bat pudiste hacer esto? Y como lo corres?
espero me puedas ayudar, desde ya muchas gracias!

Saludos

Victor
***************************

Gracias igual, ya lo solucioné... Encontra una ayuda y se puede hacer desde el mismo excel.
Desde datos, luegos desde texto, aqui selecciono el.txt que quiero extraer los datos en filas, y el excel solo lo hace.
Suficiente, sin tanto lio el excel me lo soluciona..

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar