2012-08-15 45 views
8

¿Hay alguna manera de CLS una sola línea de salida? Yo no creo que hay ningún interruptor para CLS, así que tal vez una mejor pregunta sería:
CLS (claro) una sola línea?

¿Hay alguna manera de

  1. retener toda la producción anterior para su reutilización?
    o
  2. captura la salida que se muestra actualmente (como se puede marcar y copiar)?

Estoy tratando de hacer que mis scripts sean un poco más fáciles de usar al tener retroalimentación/información en tiempo real, en lugar de líneas múltiples con ligeros cambios. La única manera que puedo pensar en hacer esto, sin embargo, es la siguiente:

@echo off 
goto Prep 

:Prep 
    SET count=5 
    SET genericMessage=This window will close 

    goto Output 

:Output 
    IF NOT %count% == -1 (
     cls 
     IF %count% == 0 (
      echo %genericMessage% now. 
     ) ELSE (
      echo %genericMessage% in %count% seconds. 
     ) 
     SET /A count=%count% - 1 
     ping localhost -n 2 >nul 
     goto Output 
    ) ELSE (
     exit 
    ) 

Así, se obtiene lo siguiente:

enter image description here

El problema con esto, sin embargo, es que CLS borra todo el resultado, cuando solo quiero actualizar una línea borrándola y volviéndola a emitir.

¿Alguien tiene alguna idea?

+0

[Cómo sobrescribir la misma línea en la salida del comando de archivo por lotes] (https://superuser.com/q/82929/241386) –

Respuesta

3

Desafortunadamente, no hay ningún comando o utilidad nativo que reposiciona el cursor en una consola de línea de comandos de Windows.

Necesitará una utilidad de terceros.

Aacini publicó una utilidad gratuita CursorPos.exe en DOSTips. El CurorPos.exe "source" se da como dígitos hexadecimales. Para usar la fuente necesitará el HexToBin.bat "compiler".

Navegue en ambos hilos y encontrará una serie de utilidades que pueden serle de utilidad.

+0

Entonces, ¿no hay una versión de línea de comando para marcar y copiar o algo así? ¿O alguna forma de refrescar una línea que no sea mi método? :/ – mythofechelon

+0

Sin método nativo, pero puede descargar una utilidad como sugerí y mover el cursor a cualquier posición en la pantalla. En ese punto, puede sobrescribir lo que ya está allí. – dbenham

+0

Bien, gracias. Echaré un buen vistazo a ambas respuestas y luego seleccionaré una respuesta. :) – mythofechelon

2

Trate secuencias ANSI: http://www.robvanderwoude.com/ansi.php

Madriguera abajo los enlaces, http://batch.xoo.it/t2238-BG-exe-Utility-for-Batch-Games.htm parece la más prometedora.

Parece que esta página tiene una discusión útil sobre el control/configuración de los tamaños de la consola (y otras configuraciones de visualización y tamaño de la memoria intermedia). http://www.pcreview.co.uk/forums/change-buffer-size-console-window-can-runas-inherit-console-props-t1468842.html

+0

Las secuencias ANSI funcionan bien en viejas máquinas DOS, pero no lo hacen trabajar con la línea de comando de Windows. Extraño esa funcionalidad :( – dbenham

+0

Bg incluso funciona en Win7 x64. :-) (Utiliza wscript) – azhrei

+0

Bien, gracias. Echaré un buen vistazo a ambas respuestas y luego seleccionaré una respuesta. :) – mythofechelon

10

Si solo necesita mover el cursor en una línea (como su muestra),
es posible con un carácter de retorno de carro.

@echo off 
setlocal EnableDelayedExpansion 
for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a" 
for /L %%n in (5 -1 1) do (
    <nul set /P "=This window will close in %%n seconds!CR!" 
    ping -n 2 localhost > nul 
) 
Cuestiones relacionadas