Comando for /f : recuperación de un dato de un archivo

Resuelto
vayleme Mensajes publicados 91 Estado Miembro -  
vayleme Mensajes publicados 91 Estado Miembro -
Hola,

No consigo recuperar un dato contenido en una línea de un archivo de texto.
Así es como se ve el archivo.

dato : 1
) dato : 2
- dato : 3
$ dato : 4

el valor al final de la línea es indeterminado, consigo recuperar el dato de la última línea y de la penúltima con estos comandos:

for /f "tokens=2 delims=:" %%a in (archivo.txt) do set a=%%a
for /f "tokens=2 delims=: eol=$" %%b in (archivo.txt) do set b=%%b


Pero no encuentro los comandos para las dos primeras líneas.
Espero que puedan ayudarme.

--
Atentamente,
Vayleme

2 respuestas

  1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
     
    Hola,

    Hay un espacio entre el carácter especial y los datos, así que debería ser simple.

    for /f "eol=: tokens=2 delims= " %%a in (fichero.txt) do set var=%%a


    “La inteligencia artificial se define como el contrario de la estupidez natural.”
    1
    1. vayleme Mensajes publicados 91 Estado Miembro 16
       
      Hola,
      definitivamente me ayudas mucho estos últimos días Barnabé ^^ gracias nuevamente por tu respuesta, pero lamentablemente tu comando recupera el dato de la última línea.
      aquí está el retorno del comando.
      for /f "eol=: tokens=2 delims= " %%a in (fichier.txt) do echo %%a

      devuelve
      1
      2
      3
      4

      y si hago
      for /f "eol=: tokens=2 delims= " %%a in (fichier.txt) do set var=%%a

      solo el "4" se encuentra en la variable. Solo quiero el "2" y otro comando para conservar solo el "1".
      0
      1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > vayleme Mensajes publicados 91 Estado Miembro
         
        No entiendo bien qué parte quieres recuperar, un verdadero ejemplo de archivo txt sería bienvenido.
        0
      2. vayleme Mensajes publicados 91 Estado Miembro 16 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
         
        el archivo txt contiene las 4 líneas que escribí arriba, el objetivo es recuperar en 4 variables diferentes los valores al final de cada línea (1, 2, 3, 4) sabiendo que esos valores no son estáticos. Pero al final, acabo de encontrar ahora mismo, aunque es un poco un bricolaje, voy a poner mi solución en el post y dejo el tema abierto un día por si alguien tiene una mejor idea.
        0
  2. vayleme Mensajes publicados 91 Estado Miembro 16
     
    @echo off
    cls

    ::recuperación de la última línea
    for /f "tokens=2 delims=:" %%a in (fichier.txt) do set a=%%a

    ::copiar el archivo sin la última línea
    for /f "tokens=* delims=: eol=$" %%e in (fichier.txt) do echo %%e >> %cd%\temp.txt

    ::pausa creación del archivo
    timeout /nobreak /t 003 >nul

    ::recuperación de la penúltima línea
    for /f "tokens=2 delims=:" %%b in (%cd%\temp.txt) do set b=%%b

    ::copiar el archivo temp sin la última línea
    for /f "tokens=* delims=: eol=-" %%f in (%cd%\temp.txt) do echo %%f >> %cd%\tempp.txt

    ::pausa creación del archivo
    timeout /nobreak /t 003 >nul

    ::recuperación de la segunda línea
    for /f "tokens=2 delims=:" %%c in (%cd%\tempp.txt) do set c=%%c

    ::recuperación de la primera línea
    for /f "tokens=2 delims=: eol=)" %%d in (%cd%\tempp.txt) do set d=%%d

    ::pausa antes de la eliminación de archivos
    timeout /nobreak /t 002 >nul

    ::eliminar archivos
    erase %cd%\temp.txt %cd%\tempp.txt

    echo presiona una tecla para ver los valores !
    pause >nul

    echo %a%
    echo %b%
    echo %c%
    echo %d%

    echo.
    echo presiona una tecla para salir.
    pause >nul
    exit


    Atentamente,
    Vayleme
    0
    1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
       
      No estoy seguro de haberlo entendido bien, ¿te ayuda esto?
      for /f "eol=$ tokens=1 delims=-)" %%a in (fichero.txt) do echo %%a

      No muestra la última línea.
      0
      1. vayleme Mensajes publicados 91 Estado Miembro 16 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
         
        No he encontrado una solución que cumpla con los requisitos que buscas sin modificar el archivo.
        0
      2. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > vayleme Mensajes publicados 91 Estado Miembro
         
        for /f "eol=$ tokens=*" %%a in (fichier.txt) do (for /f "eol=- tokens=1,2 delims=):" %%g in ('echo %%a') do (set var=%%h))
        0
      3. vayleme Mensajes publicados 91 Estado Miembro 16 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
         
        yep, funciona, solo hay que corregir dos pequeños errores:

        for /f "eol=$ tokens=*" %%a in (fichier.txt) do (for /f "eol=- tokens=2 delims=:" %%g in ('echo %%a') do (set var=%%g)


        Gracias por haber propuesto esta solución, nunca habría pensado en anidar varios for en un mismo comando, ¡me has enseñado algo más! ^^.
        ¡Gracias por tu ayuda!

        Dado que se ha encontrado una solución eficaz, cierro este tema.
        0