2014-02-24 83 views
0

我正在創建一個批處理文件,其中有一個從\/的活動更改字符,要做到這一點,您顯然需要清除屏幕,已經在屏幕上,然後在最後添加下一個字符。收集屏幕上的所有內容(控制檯緩衝區)以創建一個不斷變化的字符

當我已經知道屏幕上有什麼時,這並不難,但是我想讓這個程序可以在任何時候被其他程序調用。這就是爲什麼我需要收集屏幕上的所有當前內容的一種手段,所以,當我的程序稱爲它可以:

  1. 收集屏幕上的所有變量或到一個臨時文件
  2. 清除屏幕輸出的內容+ CHAR1
  3. 清屏輸出的內容+ CHAR2
  4. 重複2-3號的指定時間

我可以管理2-4我只需要1幫助。

有什麼建議嗎?這甚至有可能嗎?

在此先感謝莫娜。

+0

如果微調是在最後的印刷線,有可能改變它不清除屏幕。用'CR'字符顯示foxiderive或者退格字符 – jeb

+0

foxidrive/jeb提到的'CR'或'BS'技巧是否解決了您的問題?如果沒有,也許我的[CursorPos](http://www.dostips.com/forum/viewtopic.php?f=3&t=3428&p=17216&hilit=CursorPos.exe#p17216)輔助程序可以幫助你(尋找程序#6 )。這個程序可以讓你將光標移動到某個特定的位置,然後在該位置讀取字符! – Aacini

回答

2

這不是你一個答案,但它顯示了一個微調,你可能沒見過的技術:

第二示範遵循它,但它可能無法在Windows 8中正常工作。

@Echo OFF 
    SetLocal EnableExtensions EnableDelayedExpansion 
    For /f %%a in ('copy /Z "%~dpf0" nul') Do set "CR=%%a" 
    Set "busy=|/-\" 
    Set /A n=0 


    ::BUSY SPINNER 
    For /L %%i in (0,1,10) Do (
    Set /A "n=%%i%%4" 
    For /L %%n in (!n! 1 !n!) Do Set /P "=Calculating !busy:~%%n,1! !CR!"<NUL: 
    PING -n 2 127.0.0.1 >NUL: 
    ) 
    ::COUNTDOWN 
    For /L %%i in (10,-1,1) Do (
    Set /P "=Backup will begin in %%i seconds. !CR!"<NUL: 
    PING -n 2 127.0.0.1 >NUL: 
    ) 

    ::PROGRESS 
    For %%i in (*) Do (
    Set /P "=Copying %%i         !CR!"<NUL: 
    PING -n 2 127.0.0.1 >NUL: 
    ) 
    Set /P "=Done.            !CR!"<NUL: 

    pause 

這裏是一個旋轉的紡絲的第二個演示:

@echo off 
:jeb 
setlocal EnableDelayedExpansion 
if "%~1"==":::" goto :spinnerThread 

:menuLoop 
<nul set /p menu=Select menu[1 or 2]= 
call :GetKey 
echo(
echo Pressed '!key!' 
if !key!==1 call :menu1 
if !key!==2 call :menu2 
if !key!==2 call :menu2 
goto :menuLoop 

:menu1 
:menu2 
call :spinnerStart 
rem do some work 
ping localhost -n 3 > nl 
call :spinnerStop 
echo Finished 
exit /b 

:spinnerStart 
del spinnerStop.tmp > nul 2>&1 
start /b "" cmd /c "%~df0" ::: 
exit /b 

:spinnerStop 
echo dummy > spinnerStop.tmp 
:__spinnerStop 
if exist spinnerStop.tmp goto :__spinnerStop 
exit /b 

:spinnerThread 
for /f %%a in ('copy /Z "%~f0" nul') do set "CR=%%a" 
set "spinChars=\|/-" 

:spinnerLoop 
set /a "spinner=(spinner + 1) %% 4" 
<nul set /p ".=Waiting...!spinChars:~%spinner%,1!!CR!" 
ping localhost -n 2 > nul 2>&1 
if not exist spinnerStop.tmp goto :spinnerLoop 
del spinnerStop.tmp > nul 2>&1 
echo(
exit /b 

:GetKey 
set "key=" 
for /F "usebackq delims=" %%L in (`xcopy /L /w "%~f0" "%~f0" 2^>NUL`) do (
    if not defined key set "key=%%L" 
) 
set "key=%key:~-1%" 
exit /b 
+0

酷感謝隊友。 – Monacraft

+0

等待如何如何在'(複製/ Z「%〜dpf0」nul「)中設置」CR = %% a「產生回報? – Monacraft

+0

它是允許它運行的延遲擴展。 http://www.dostips.com/forum/viewtopic.php?f=3&t=5405 – foxidrive

相關問題