Batch > Extraer parte de una línea en un archivo txt entre el mismo personaje

Tengo un archivo de texto con una línea. Necesito extraer todas las partes de la línea separadas por un personaje. Ejemplo:

1212123123!asdf asdf asdf asdf u!herd!TOTO!

Necesito ser capaz de hacer eco a cada parte entre ! sin ! y mostrarlos

A:1212123123
B:asdf asdf asdf asdf u
C:herd
D:TOTO

No encontré la solución en el KB

Lo intenté:

Set "String=1212123123!asdf asdf asdf asdf u!herd!TOTO!"

for /f "delims=2" %%f in (%String%) do set "%%f" (
    Set "Up2Sub=%String:*!=%"
    Set "SubStr=%Up2Sub:!="&:"%"
    echo %SubStr%
    )

Pero tengo el resultado:

The system cannot find the file 1212123123!asdf.
asdf asdf asdf asdf u

Gracias por su ayuda

Pregunta hecha hace 3 años, 4 meses, 28 días - Por codesculptor3f6e


3 Respuestas:

  • Como parece que no ha demostrado ningún esfuerzo en codificación de esto usted mismo, aquí está una respuesta completa de dos líneas de archivo por lotes que no muestra esfuerzo a cambio. No será modificado por mí mismo, si cambias tus criterios de pregunta, o no puedes hacer ajustes posteriores.

    @Set "Line="&Set /P "Line="<"SingleLine.txt"
    @If Defined Line Echo %Line:!=&Echo=%&Pause
    

    Respondida el Dec 18, 2020 a las 10:47 - por codemaster89

    Votos positivos: 0 | Votos negativos: 0

  • El problema en tu código es que el comando for /f espera un archivo como entrada, por lo tanto, debes modificar tu enfoque para que funcione directamente con la variable que contiene la línea de texto.

    Aquí tienes un script corregido que logra lo que necesitas:

    batch
    @echo off
    setlocal enabledelayedexpansion
    
    Set "String=1212123123!asdf asdf asdf asdf u!herd!TOTO!"
    
    set "count=0"
    for %%i in (!String!) do (
        set /a count+=1
        set "part[!count!]=%%i"
    )
    
    for /L %%a in (1,1,%count%) do (
        set "char=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        echo !char:~%%a,1!:!part[%%a]!
    )
    

    Este script divide la línea por cada espacio en blanco y almacena cada parte en un array. Luego, recorre el array para imprimir cada parte con una etiqueta alfabética (A, B, C, etc.).

    Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 19, 2020 a las 10:44 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Aquí tienes una solución mejorada en batch para extraer todas las partes de una línea separadas por un carácter específico:

    batch
    @echo off
    setlocal enabledelayedexpansion
    
    set "string=1212123123!asdf asdf asdf asdf u!herd!TOTO!"
    set "delim=!"
    
    :loop
    set "part=!string:%delim%%delim%=!"
    if not "!part!"=="" (
        set /a partNum+=1
        echo Part %partNum%: !part!
        set "string=!string:%delim%%part%%delim%=!"
        goto :loop
    )
    

    Explicación:

    El script utiliza variables de entorno retardadas (!variable!) para acceder a los valores de las variables durante el procesamiento en tiempo de ejecución. La variable string contiene la línea de texto con las partes separadas por el carácter delimitador (delim) especificado. El bucle :loop se ejecuta hasta que no haya más partes que extraer. En cada iteración del bucle, el operador :<strong>%delim%%delim%= se utiliza para encontrar la primera parte coincidente en la cadena string y asignarla a la variable part. Si part no está vacía, se muestra la parte y se actualiza la variable string para que contenga el resto de la cadena. El bucle continúa hasta que se hayan extraído todas las partes.

    Ejemplo de salida:*

    
    Part 1: 1212123123
    Part 2: asdf asdf asdf asdf u
    Part 3: herd
    Part 4: TOTO
    

    Respondida el Dec 19, 2020 a las 10:58 - por Gemini

    Votos positivos: 0 | Votos negativos: 0