Ms-Dos - Script .BAT: cómo leer un fichero línea a línea

 
Vista:

Script .BAT: cómo leer un fichero línea a línea

Publicado por Zaurada (1 intervención) el 10/02/2013 20:33:11
Buenos días/tardes/noches,

ya he hecho scripts bajo sistemas Linux, pero es mi primera vez con Windows (añoro los *.sh T_T)
Lo cierto es que sé lo que quiero hacer, pero no sé cómo traducirlo en lenguaje para .BAT.

Tengo un fichero de texto y lo que quiero hacer es tan sencillo como recorrerlo y guardarme, por iteración, en una variable el contenido de su línea.

for /F %i in (fichero.txt) do (
set nombre=%f
echo %i REM echo %nombre
)

Pero obviamente no me va porque obviamente no sé hacerlo bien.

Haciendo pruebillas, ni siquiera me funciona bien el echo, porque si hago esto:
for /F %i in (dirmy.txt) do (echo "Linea: %i")

lo que me devuelve es
(echo "Linea: contenido ficherooooo" )
Linea: contenido ficherooooo

¿Pero por qué me saca también la primera línea del propio echo?? no quiero que me muestre en una línea un echo del propio comando echo. Sólo que me muestre un echo de %i ....
(he probado a poner (echo off "Linea: %i") para que o salga el propio echo también, pero no me va...)

¿Y cómo puedo guardar el contenido de la línea en una variable y luego usarla??

Por último... si alguien me pudiera recomendar algún buen manual o página que muestre un poquito la nomenclatura para hacer estos scripts, lo agradecería mucho. Ya que en lo que fallo es que no sé cómo traducirlo a BAT y consola Windows.

Mil gracias.
Saludos y que tenga un buen día.
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
Imágen de perfil de Antoni Masana
Val: 1.112
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por Antoni Masana (572 intervenciones) el 11/02/2013 08:43:37
Hola Zaurada ;

Para ejecutar un proceso FOR se pone un % si se ejecuta desde la linea de comandos y dos % si se ejecuta desde un BAT.

Para ejecutarlo desde la línea de comandos:

1
C:\> @FOR /F %A IN (fichero.txt) DO @ECHO Linea: %A


Para ejecutarlo desde un proceso BAT

1
2
@ECHO OFF
FOR /F %%A IN (fichero.txt) DO @ECHO Linea: %%A


Esto funciona pero toma la linea hasta el primer espacio en blanco

Esto toma toda la linea si no existe el separador "·"

1
2
@ECHO OFF
FOR /F "delims=·" %%A IN (fichero.txt) DO @ECHO Linea: %%A


Estos ejemplos muestran las lineas de un fichero. Si deseas algo más complejo yo lo que hago es llamar a otro Bat

1
2
@ECHO OFF
FOR /F "delims=·" %%A IN (fichero.txt) DO CALL Otro_Bat %%A


o a si mismo

1
2
3
4
5
6
7
8
@ECHO OFF
FOR /F "delims=·" %%A IN (fichero.txt) DO CALL:Tratar "%%A"
GOTO:EOF
 
:Tratar
   SET Reg=%~1
   ECHO %Reg%
   GOTO:EOF


La línea " SET Reg=%~1 " quita las comillas dobles.

Esto se puede simplificar o complicar dependiendo del contenido de fichero.txt y lo que tengas que realizar con él


El MSDOS a nivel de comandos y ejecución de los mismos esta en pañales si lo comparas con linux.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de A.H.H

Script .BAT: cómo leer un fichero línea a línea

Publicado por A.H.H (212 intervenciones) el 13/02/2013 18:58:27
Hola un apunte solamente, ya que Antoni te lo ha explicado bien.

Tambien se puede poner Tokens , esto es para leer toda la linea entera aunque tenga espacios u otros caracteres.

1
2
3
@ECHO OFF
FOR /F "tokens=*" %%A IN (fichero.txt) DO @ECHO Linea: %%A
pause
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

Script .BAT: cómo leer un fichero línea a línea

Publicado por jmv0607@live.com (7 intervenciones) el 15/12/2014 21:24:07
Muy clara la explicación, perdón la insistencia, como guardar cada linea en una variable separada?

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

Script .BAT: cómo leer un fichero línea a línea

Publicado por Aldo Cazzulini (1 intervención) el 27/09/2015 21:46:44
Para su conocimiento,
1.- Primera afirmación: los comandos Batch no manejan vectores o matrices como otros lenguajes, todo es a fuerza de variables únicas.
2.- Segunda afirmación: esta lee los archivos o las lineas de los archivos o la información y la coloca en lotes en el stack o pila y el proceso Batch puede leerlas una por una desde la pila al batch.
Atencion esto lo deduje despues de invertir dias en averiguar como funciona.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fidelk K. Arias S.
Val: 15
Ha disminuido su posición en 2 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por Fidelk K. Arias S. (4 intervenciones) el 08/04/2016 15:52:17
Yo lo hice, lo logré.
Lo que hacía era tomar/leer las todas lineas de un .txt con un FOR, cada línea se almacenaba en una varible.
Luego cuando ya tenía todas las líneas almacenadas en variables las imprimia sobreescribiendo el mismo .txt o en otro .txt

Solo encontré dos problemillas las lineas vacias en el .txt original eran suprimidas en .txt final y había algún caracter mas que desaparecía
creo que era ! o # una de ellos... aunque tal ves algunos mas, no hice esa prueba.

CONTEO DE LINEAS
Lo primero era hacer un for que lea linea a linea el .txt, y al mismo tiempo que las muestre y las vaya contando
algo así... (echo %%lin)&(con=con+1) luego al final con tendría el numero total de líneas.

LINEAS EN VARIABLES #
Luego otra ves con un for, leía línea a línea el .txt pero esta ves no las contaba, sino mas bien las almacenaba en una variable V%num% o V!num! no rcuerdo claramente. num era la variable que se iba incrementando hasta con
Y entonces en cada lectura de línea se irian creando
V1=%%lin
V2=%%lin
V3=%%lin
.
.
hasta llegar a V!con! la ultima linea.
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

Script .BAT: cómo leer un fichero línea a línea

Publicado por radyx (1 intervención) el 10/11/2017 10:16:26
tio eres un monstruo
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 HachaNov07
Val: 15
Ha disminuido su posición en 2 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por HachaNov07 (4 intervenciones) el 19/11/2017 16:48:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
::Almacenando lineas en variables
@echo off
 
setlocal enabledelayedexpansion
:: Esta linea (aunque no la comprendo muy bien) me ayuda cuando utilizo
:: variable creadas en otro FOR o creadas fuera de todo con anterioridad
 
set num=0
:: La variable num me servirá para ennumerar las lineas
 
for /f "tokens=*" %%h in (texto.txt) do (
    set /a num=!num!+1
    set LIN_!num!=%%h
)
:: El propósito de este FOR, era leer las lineas de "texto.txt" e ir almacenándolas en una variable numerada
 
echo Lineas totales almacenadas fueron !num!
pause
: :Aqui finalizo indicando el número de lineas totales en el fichero objetivo ("texto.txt")
 
:: Mas o menos así fue como se me ocurrió almacenar lineas en variables.
:: Encuéntrame/Escríbeme! youtube.com/user/HachaNov07 ó @HachaNov07
:: Dom19Nov2017
almacenarVAR
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

Script .BAT: cómo leer un fichero línea a línea

Publicado por Pacman (3 intervenciones) el 10/05/2018 22:43:12
Hola amigo aunque tu archivo .bat es muy buen ejemplo tiene un error...

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
::Echo off permite apagar la salida inmediata hasta que sea llamada por un echo
@echo off
 
setlocal enabledelayedexpansion
:: Esta linea permite el retraso de expansion de la variable de entorno hasta que encuentra endlocal
 
set num=0
:: La variable num me servirá para ennumerar las lineas
 
for /f "tokens=*" %%h in (texto.txt) do (
    :: Almaceno el número de líneas en la variable global
    set /a num=!num!+1
    :: Para imprimir las lineas y el contenido linea por linea
    echo LIN_!num!=%%h
)
:: El propósito de este FOR, era leer las lineas de "texto.txt" e ir almacenándolas en una variable numerada
 
echo Lineas totales almacenadas fueron !num!
:: Para restaurar los valores inciales y expandir la variable de entorno ya que no se vuelve a hacer bucle tu .bat
endlocal
:: Limpiar la consola
cls
pause
: :Aqui finalizo indicando el número de lineas totales en el fichero objetivo ("texto.txt")
 
:: Mas o menos así fue como se me ocurrió almacenar lineas en variables.
:: Encuéntrame/Escríbeme! youtube.com/user/HachaNov07 ó @HachaNov07
:: Dom19Nov2017
 
:: Para salir de la consola
exit
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de HachaNov07
Val: 15
Ha disminuido su posición en 2 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por HachaNov07 (4 intervenciones) el 30/06/2018 19:38:12
Gracias! ...lo que no se ejercita o lo que no se hace habitual, se olvida.
En esas lineas intentó recordarlo cómo hice yo.
Es probable que haya errores, pero no fuiste específico gg. Tengo curiosidad por ver lo que has observado.
Ahora que es expansión de variable?, no me doy cuenta de esto D: Tarea
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

Script .BAT: cómo leer un fichero línea a línea

Publicado por Guille (1 intervención) el 28/12/2017 00:04:44
Disculpen pero tengo el siguiente problema cree un .bat y hago el for /f %%a in (prueba.txt) y no me devuelve nada... el prueba txt es creado anteriormente en el mismo bat. y contiene lo siguiente:


Manufacturer Product
ASUSTeK Computer Inc. XXXX

aun asi no devuelve nada
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 HachaNov07
Val: 15
Ha disminuido su posición en 2 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por HachaNov07 (4 intervenciones) el 30/06/2018 19:42:59
Mmm ya hace un año.
Podría ser:

for /f %%a in (prueba.txt) do (echo %%a)

Creo que eso te mostraría todas las lineas contenidas en prueba.txt
También podés goglear "comando for profesor emilio" ahí aprendí sobre el comando for
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

Script .BAT: cómo leer un fichero línea a línea

Publicado por john (1 intervención) el 03/08/2016 16:30:15
iniciasted bien el "for" tiene parametros como "delims" ; bueno pero puedes probar con esto

for /F "delims=" %a in (texto.txt) do (echo %a)

el parametro "delims" es para que haga un salto por cada espacio o signo , . ; - etc que anteceden en una linea o lineas
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.112
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Script .BAT: cómo leer un fichero línea a línea

Publicado por Antoni Masana (572 intervenciones) el 28/12/2017 15:25:27
Hola Guille,

Abre un nuevo mensaje, este es continuación de uno muy viejo y la mayoria de de la gente solo ve los últimos, como hago yo.

Te comento un pequeño detalle que tendras que verificar desde una ventana de MSDOS, el fichero deberia tener un tamaño de unos 50 byts. Si tiene el doble, malo porque no lo podras leer con el FOR.

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