2012-10-10 27 views
5

Por lo tanto, actualmente estoy haciendo una "pantalla de carga", y posiblemente para ahorrar algo de espacio en mi codificación, quiero saber si podría editar una línea ya emitida. Tendría quizás un corchete [] como una etapa de carga, por lo que sería posible poner un corchete, luego esperar y ver si el usuario presiona C (para continuar) durante 1-2 segundos, y si no pasa a la siguiente etapa ([] [])? Actualmente tengo un script donde [] está configurado como load y para cada etapa, hago CLS y luego echo %LOAD%[].¿Es posible editar una línea ya emitida en lote de Windows?


Además, ¿y si yo sólo quiero hacer una actualización de estado en una línea, como por ejemplo:

Checking status... 
Loading server... 

y luego

Checking status... OK 
Loading server... done 

puntos de bonificación si me puede encontrar un personaje como que es compatible con Batch.


+2

No, pero se puede utilizar 'cls' y un bucle goto o la barra de título (vea el comando' title'). Compruebe también esta discusión: http://ss64.org/viewtopic.php?id=919. – npocmaka

+0

@npocmaka: Debería eliminar nuestro comentario y convertirlo en una respuesta. –

+0

sí, lo sé. Eso es lo que estoy haciendo actualmente. –

Respuesta

6

Puede ommit los CLS y recrear la pantalla completa con la ayuda de set /p, como set /p hace un salto de línea no se emiten, se puede añadir texto.

Normalmente set /p es para asignar a una variable de texto introducido por un usuario, pero si se usa la redirección de NUL simplemente da salida a texto.

@echo off 

for /L %%n in (1 1 5) do (
    <nul set /p ".=[]" 
    ping -n 2 localhost > nul 
) 
echo(
echo The end 

La actualización de estado que solicitó, se puede manejar de la misma manera, ya que solo agrega algo a la línea.
Si desea cambiar partes de la línea o la línea completa, debe mover el cursor hacia atrás o hacia el comienzo de la línea.
Ambos se pueden hacer con el carácter de retroceso o el carácter de retorno de carro.

Esta es una muestra que cuenta con una ubicación de la pantalla fija

setlocal EnableDelayedExpansion 
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a" 
for /L %%n in (1 1 1000) do (
    <nul set /p ".=%%n!CR!" 
) 
+0

Este es un gran truco. ¡Gracias! –

3

Creación de una blockchar como se puede hacer con

setlocal EnableDelayedExpansion 
for /F "usebackq tokens=1" %%c in (
    `forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo 0xde"`) do (
    set BlockChar=%%c 
) 
echo %BlockChar% 

Gracias a dbenham Generate nearly any character, including TAB, from batch

+0

Es posible que desee fusionar esto con su otra respuesta para mantenerlo unido. –

Cuestiones relacionadas