salto linea comando batch windows batch-file cmd

windows - comando - echo salto de linea batch



Windows cmd: echo sin lĂ­nea nueva pero con CR (2)

@echo off setlocal enableextensions enabledelayedexpansion for /f %%a in (''copy "%~f0" nul /z'') do set "CR=%%a" set "count=0" for %%a in (*) do ( set /a "count+=1" <nul set /p ".=working on file !count! !CR!" )

El primer comando ejecuta una operación de copia que deja un carácter de retorno de carro dentro de la variable.

Ahora, en el bucle de archivo, cada línea se repite utilizando un <nul set /p que generará la cadena de solicitud sin un salto de línea y sin esperar la entrada (estamos leyendo desde nul ). Pero dentro de los datos repetidos, incluimos el retorno de carro obtenido anteriormente.

PERO para que funcione, la variable CR debe repetirse con la expansión retrasada. De lo contrario, no funcionará.

Si por alguna razón necesita desactivar la expansión retardada, esto puede hacerse sin la variable CR utilizando el parámetro for replaceable

@echo off setlocal enableextensions disabledelayedexpansion for /f %%a in (''copy "%~f0" nul /z'') do ( for /l %%b in (0 1 1000) do ( <nul set /p ".=This is the line %%b%%a" ) )

Me gustaría escribir en la misma línea dentro de un bucle en un archivo de lote de Windows. Por ejemplo:

setlocal EnableDelayedExpansion set file_number=0 for %%f in (*) do ( set /a file_number+=1 echo working on file number !file_number! something.exe %%f ) setlocal DisableDelayedExpansion

Esto dará como resultado:

echo trabajando en el archivo número 1

echo trabajando en el archivo número 2

echo trabajando en el archivo número 3

. . .

Me gustaría que todos estén en la misma línea. Encontré un truco para eliminar la nueva línea (por ejemplo, aquí: Windows batch: echo sin línea nueva ), pero esto producirá una línea larga.

¡Gracias!


Gracias a la respuesta de MC ND he creado una subrutina, echocr , que puede llamar sin demora de expansión, que hará eco de una cadena con solo un retorno de carro, y sin nueva línea. (Los espacios después de %input% se ajustan para cubrir todos los mensajes anteriores).

Puede usarlo para sobreescribir una línea como se muestra en el código modificado:

@echo off call :echocr "good morning" PING -n 2 127.0.0.1>nul call :echocr "good afternoon" PING -n 2 127.0.0.1>nul call :echocr "bye now" PING -n 2 127.0.0.1>nul pause :echocr :: (echo string with carriage return, no line feed) for /F "tokens=1 delims=# " %%a in ( ''"prompt #$H# & echo on & for %%b in (1) do rem"'' ) do set "backspace=%%a" set input=%~1 set "spaces40= " set "spaces120=%spaces40%%spaces40%%spaces40% for /f %%a in (''copy "%~f0" nul /z'') do ( set /p ".=*%backspace%%spaces120%%%a" <nul set /p ".=*%backspace%%input%%%a" <nul ) exit /b