por pantalla off mostrar mensaje lotes emergente ejemplos comandos comando bat archivos text batch-file numbers lines

text - pantalla - echo off bat



Mostrar lĂ­neas del archivo de texto en un archivo por lotes (2)

Aquí hay una modificación simple del archivo de muestra por lotes anterior. Copie el código siguiente en el archivo y asígnele el nombre "LineDisplay.bat": toma FirstLineNumber y LastLineNumber como parámetros. Ejemplo: LineDisplay test.txt 12 30 (para leer las líneas 12-30)

@echo off setlocal enabledelayedexpansion if [%1] == [] goto usage if [%2] == [] goto usage if [%3] == [] goto usage set /a FirstLineNumber = %2 set /a LastLineNumber = %3 echo Reading from Line !FirstLineNumber! to !LastLineNumber! SET /a counter=1 for /f "usebackq delims=" %%a in (%1) do ( if !counter! GTR !LastLineNumber! goto exit if !counter! GEQ !FirstLineNumber! echo !counter! %%a set /a counter+=1 ) goto exit :usage echo Usage: LineDisplay.bat FILENAME FirstLineNumber LastLineNumber :exit

Aquí hay una línea de un buen tutorial sobre cómo crear archivos por lotes http://vtatila.kapsi.fi/batch_tutorial.html

Estoy tratando de encontrar un script que me permita mostrar "linenumber # and linenumber #, así como las líneas # - #" de un archivo de texto en un archivo por lotes. Encontré este script aquí en este sitio ...

@echo off setlocal enabledelayedexpansion if [%1] == [] goto usage if [%2] == [] goto usage SET /a counter=0 for /f "usebackq delims=" %%a in (%2) do ( if "!counter!"=="%1" goto exit echo %%a set /a counter+=1 ) goto exit :usage echo Usage: head.bat COUNT FILENAME :exit

Y funciona genial :) Pero toma el número de líneas de la parte superior del archivo de texto. Quiero ser capaz de mostrar ciertas líneas en el archivo de texto, así como un rango si es posible ..

EG: Tengo un archivo de texto con 30 líneas, y quiero mostrar las líneas 1-4; 7-11; 13; 17-20; 22; 26 y 29


Parece funcionar:

@ECHO OFF REM Show usage and quit if no file name was given IF [%1]==[] GOTO USAGE REM Show entire file if no range was given IF [%2]==[] TYPE %1 & GOTO :EOF SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION SET FILENAME=%1 SET LASTLINE=0 REM Build the array of lines to display SHIFT :RANGEREADLOOP CALL :BUILDARRAY %1 SHIFT IF NOT [%1]==[] GOTO RANGEREADLOOP REM Loop through the file and keep track of the lines to display SET CURRENTLINE=0 SET INDEX=1 FOR /F "delims=" %%l in (%FILENAME%) DO ( SET LINE=%%l CALL :PRINTLINE ) GOTO :EOF REM Adds the lines from the specified range to the array of lines to display :BUILDARRAY REM Find out whether we have a single line or a range SET TEST=%1 SET /A TEST1=%TEST% SET /A TEST2=%TEST:-=% IF %TEST1%==%TEST2% ( REM Single line SET /A LASTLINE+=1 SET LINES[!LASTLINE!]=%1 ) ELSE ( REM Range FOR /F "tokens=1,2 delims=-" %%x IN ("%1") DO (SET RANGESTART=%%x&SET RANGEEND=%%y) REM Some sanity checking IF !RANGESTART! GTR !RANGEEND! ( ECHO.Problem with range !RANGESTART!-!RANGEEND!: ECHO. Ranges must have a start value smaller than the end value. EXIT /B 1 ) ELSE ( FOR /L %%i IN (!RANGESTART!,1,!RANGEEND!) DO ( SET /A LASTLINE+=1 SET LINES[!LASTLINE!]=%%i ) ) ) GOTO :EOF REM Prints the specified line if the current line should be printed :PRINTLINE SET /A CURRENTLINE+=1 IF %CURRENTLINE%==!LINES[%INDEX%]! ( REM We have a line to print, so do this ECHO !LINE! SET /A INDEX+=1 ) GOTO :EOF REM Prints usage and exits the batch file :USAGE ECHO.%~n0 - Displays selected lines from a text file. ECHO. ECHO.Usage: ECHO. %~n0 ^<filename^> ^<range^> ... ECHO. ECHO. ^<filename^> - the text file from which to read ECHO. ^<range^> - the line range(s) to display. ECHO. ECHO.Example: ECHO. %~n0 foo.txt 1-4 13 15 18-20 ECHO. ECHO. will display the first four lines from the file "foo.txt", ECHO. the 13th and 15th as well as the lines 18 to 20. ECHO. ECHO.Line ranges are separated by comma, semicolon or space. If no range is given, ECHO.the entire file is displayed. EXIT /B 1 GOTO :EOF

Toda la secuencia de comandos podría usar una mejor verificación de errores, ejemplos de lo que no se debe hacer o donde la comprobación de errores es poco convincente:

  • dl foo.txt 1-2-4 (imprime las líneas 1-2 pero no dl foo.txt 1-2-4 ningún mensaje de error)
  • dl foo.txt -1 (mensaje de error que el rango 1- no es correcto)

Otras limitaciones:

  • Los rangos deben ser ordenados. Con la implementación actual no hay forma de hacer algo como dl foo.txt 7-8,1-2 .
  • No se puede seleccionar ninguna línea dos veces. Algo como dl foo.txt 1,2,2-8,11-15 se detendrá después de la segunda línea.
  • Sin soporte para terminaciones de línea estilo UNIX (U + 000A)

EDITAR: Se corrigió un problema con los archivos que contienen paréntesis.