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