Batch file 收集屏幕上的所有内容(控制台缓冲区)以创建变化的角色

Batch file 收集屏幕上的所有内容(控制台缓冲区)以创建变化的角色,batch-file,console,Batch File,Console,我正在创建一个批处理文件,其中存在一个从\到/的动态变化字符,为此,您显然需要清除屏幕,输出屏幕上已经存在的所有内容,然后在末尾添加下一个字符 当我已经知道屏幕上显示的内容时,这并不难,但是我正在尝试使它成为一个可以随时被其他程序调用的程序。这就是为什么我需要一种收集屏幕上所有当前内容的方法,以便在调用我的程序时可以: 将屏幕上的所有内容收集到变量或临时文件中 清除屏幕并输出其内容+字符1 清除屏幕并输出其内容+字符2 重复2-3次指定次数 我能应付2-4次我只需要1次帮助 有什么建议吗?这可能

我正在创建一个批处理文件,其中存在一个从
\
/
的动态变化字符,为此,您显然需要清除屏幕,输出屏幕上已经存在的所有内容,然后在末尾添加下一个字符

当我已经知道屏幕上显示的内容时,这并不难,但是我正在尝试使它成为一个可以随时被其他程序调用的程序。这就是为什么我需要一种收集屏幕上所有当前内容的方法,以便在调用我的程序时可以:

  • 将屏幕上的所有内容收集到变量或临时文件中
  • 清除屏幕并输出其内容+字符1
  • 清除屏幕并输出其内容+字符2
  • 重复2-3次指定次数
  • 我能应付2-4次我只需要1次帮助

    有什么建议吗?这可能吗


    提前感谢Mona。

    这不是您的答案,但它显示了一个旋转器,您可能还没有看到该技术:

    随后还有第二个演示,但在Windows8中可能无法正常工作

       @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关闭
    SetLocal EnableExtensions EnableDelayedExpansion
    对于('copy/Z'%~dpf0“nul')中的/f%%a,请设置“CR=%%a”
    设置“忙=|/-\”
    设置/A n=0
    ::忙旋转器
    对于(0,1,10)Do中的/L%%i(
    设置/A“n=%%i%%4”
    对于(!n!1!n!)中的/L%%n,请设置/P“=计算!忙:~%n,1!!CR!”numl:
    )
    ::倒计时
    对于(10,-1,1)Do中的/L%%i(
    Set/P“=备份将在%%i秒后开始。!CR!”NUL:
    )
    ::进展
    对于(*)中的%%i,请执行以下操作(
    设置/P“=复制%%i!CR!”个数:
    )
    设置/P“=完成。!CR!”nul 2>&1
    开始/b“cmd/c”%~df0::
    退出/b
    :喷丝头挡块
    echo dummy>spinnerStop.tmp
    :u喷丝头停止
    如果存在spinnerStop.tmp转到:\uu spinnerStop
    退出/b
    :喷丝头螺纹
    对于('copy/Z'%~f0“nul')中的/f%%a,请设置“CR=%%a”
    设置“spinChars=\\\;/-”
    :喷丝头环
    设置/a“微调器=(微调器+1)%%4”
    nul 2>&1
    如果不存在spinnerStop.tmp转到:spinnerLoop
    del spinnerStop.tmp>nul 2>&1
    回音(
    退出/b
    :GetKey
    设置“键=”
    对于/F“usebackq delims=“%%L in(`xcopy/L/w“%~f0”“%~f0”2^>NUL`)do(
    如果未定义键集“键=%%L”
    )
    设置“键=%key:~-1%”
    退出/b
    
    如果微调器位于最后一个打印行,则可以在不清除屏幕的情况下对其进行更改。显示了像foxidrive这样的
    CR
    字符或带有退格字符,foxidrive/jeb提到的
    CR
    BS
    技巧解决了您的问题吗?如果没有,也许我的辅助程序可以帮助您(查找程序#6)。此程序允许您将光标移动到某个位置并读取该屏幕位置处的字符!等等,
    for/f%%a in('copy/Z“%~dpf0“nul”)如何设置“CR=%%a”
    生成结转返回?正是延迟扩展允许它运行。
    @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