Soy muy nueva en lote de secuencias de comandos. No tengo mucho conocimiento sobre Lote de secuencias de comandos.

Mi duda es cómo copiar sólo algunos de la línea de texto del archivo a otro archivo de texto.

Decir que mi File.txt es

This is sample file.
I want copy this line.
Also this line.
But not this line.

Quiero copiar la línea 2 y 3, pero no el uso de su número de línea, porque puede cambiar.

Este muchI han hecho hasta ahora:

@ECHO OFF
SET InFile=abc.txt
SET OutFile=Output.txt
IF EXIST "%OutFile%" DEL "%OutFile%"
SET TempFile=Temp.txt
IF EXIST "%TempFile%" DEL "%TempFile%"

IF EXIST "%OutFile%" DEL "%OutFile%"

FOR /F "tokens=*" %%A IN ('FINDSTR "I want" "%InFile%"') DO (
    ECHO.%%A> "%TempFile%"
    ECHO.%TempFile%>>"%OutFile%"
REM CALL :RemovePrecedingWordA "%%A"
    )
FOR /F "tokens=*" %%A IN ('FINDSTR " Also this" "%InFile%"') DO (
    ECHO.%%A> "%TempFile%"
    ECHO.%TempFile%>>"%OutFile%"
REM CALL :RemovePrecedingWordA "%%A"
    )

Pero no su trabajo. Por favor, ayudar.

2 Comentarios

  1. 7

    Podría utilizar la /g: opción a findstr, que, básicamente,

    findstr /g:pattern.txt %InFile% > %OutFile%
    

    donde pattern.txt es (en tu ejemplo)

    I want
    Also this
    

    Esto asume que usted puede escribir findstr expresiones regulares para todas las líneas que desea copiar.

    Si utiliza findstr con varios archivos (comodín) obtiene el nombre de archivo al principio. Para dar la vuelta a esto, el uso de

    del out.txt
    for %F in (*.txt); do findstr /g:pattern.txt %F >> out.txt

    Tenga en cuenta que usted debe poner la fuente de los archivos en un directorio diferente al patrón y los archivos de salida (o utilice una extensión diferente) de lo contrario el *.txt comodín recogerá los archivos, también.

    • Hola Pedro, ¿hay alguna manera de eliminar la ruta de acceso del archivo, mientras que el uso de caracteres comodín «c:*.txt». Mi salida se mostrará «c:\test.txt: Blablabla» en lugar de «Blablabla». Gracias de antemano.
    • no es sencillo, pero ver la edición de mi post es que lo que quieres decir? De lo contrario, hacer una nueva pregunta podría ser mejor.
  2. 1

    También puede utilizar sed para este propósito. Ciertas líneas (en este caso 2 y 3) se copian de la siguiente manera:

    sed -n -e 2p -e 3p input.txt > output.txt
    

    Si desea copiar un segmento de líneas (todas las líneas de la línea 2 a la línea 10), a continuación, se puede utilizar:

    sed -n -e 2,10p input.txt > output.txt
    

    O también se pueden utilizar combinaciones de ciertas líneas y segmentos:

    sed -n -e 2,10p -e 15p -e 27p input.txt > output.txt
    
    • la pregunta dice: «pero no usando su número de línea, porque puede cambiar.»

Dejar respuesta

Please enter your comment!
Please enter your name here