设置/ p循环?

时间:2015-02-25 02:19:34

标签: loops batch-file for-loop input set

这可能是不可能的,但我有一个循环显示动画徽标,方法是使用TYPE键入logo_(framenumber).txtframenumber由循环决定:

:s
if %m%==379 set m=0
cls
TYPE Logo_%m%.txt
set /a m=%m%+1
goto s

我希望能够使用set /p选项并且不会干扰/停止循环,以便在用户输入set /p输入时播放动画。我认为有一种方法可以用FOR来做,但我不知道如何做。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:7)

虽然这个话题有些陈旧,但我才发现它。这是一个非常好的纯文件解决方案:

编辑:我稍微修改了代码,以使其更简单。

@echo off
setlocal EnableDelayedExpansion
if "%1" equ "Animate" goto %1

for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"
cd . > input.txt
start "" /B "%~F0" Animate

set "input="
:nextKey
   set "key="
   for /F "delims=" %%K in ('xcopy /W "%~F0" "%~F0" 2^>NUL') do if not defined key set "key=%%K"
   if "!key:~-1!" equ "!CR!" goto endInput
   if "!key:~-1!" equ "!BS!" (
      if defined input set "input=%input:~0,-1%"
   ) else (
      set "input=%input%!key:~-1!"
   )
   set /P "=%input%" > input.txt < NUL
goto nextKey
:endInput
del input.txt
echo/
echo/
echo Input read: "%input%"
goto :EOF


:Animate
set "banner=                              Enter your name please                              "
set m=0
:loop
   if not exist input.txt exit
   set /A m=(m+1)%%51
   cls
   echo/
   echo/     !banner:~%m%,31!
   echo/
   echo/
   if exist input.txt (type input.txt) else exit
   ping -n 1 -w 300 localhost > NUL
   ping -n 1 -w 300 localhost > NUL
   ping -n 1 -w 300 localhost > NUL
goto loop

在此解决方案中,动画“徽标”被横幅替换,但显示一系列文件的方法几乎相同。

答案 1 :(得分:1)

编辑:这可以批量生效。请参阅Aacini的回答。

批处理文件无法实现。批处理命令是单线程的。要同时运行两件事,需要两个cmd.exe实例。但控制台子系统一次只允许一个程序拥有控制台,因此如果第二个cmd实例连接到同一个控制台,则必须阻止其中一个。

可以使用win32可执行文件执行此类操作,该可执行文件使用WriteConsoleOutput修改控制台屏幕上的字符。如果你这样做,你就不再仅限于转储文本文件,但缺点是它比批量调用type要多得多。