Loops 在循环中设置/p?

Loops 在循环中设置/p?,loops,batch-file,for-loop,input,set,Loops,Batch File,For Loop,Input,Set,这可能是不可能的,但我有一个循环,通过使用TYPE来键入logo_u2;(framenumber).txt来显示动画徽标,framenumber由循环确定: :s if %m%==379 set m=0 cls TYPE Logo_%m%.txt set /a m=%m%+1 goto s 我希望能够使用set/p选项,并且不干扰/停止循环,以便在用户键入set/p输入时播放动画。我认为有一种方法可以通过来实现,但我不确定如何实现。有什么想法吗?谢谢。编辑:这可以成批进行。请参见Aacini的

这可能是不可能的,但我有一个循环,通过使用
TYPE
来键入
logo_u2;(framenumber).txt来显示动画徽标,
framenumber
由循环确定:

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

我希望能够使用set
/p
选项,并且不干扰/停止循环,以便在用户键入set
/p
输入时播放动画。我认为有一种方法可以通过
来实现
,但我不确定如何实现。有什么想法吗?谢谢。

编辑:这可以成批进行。请参见Aacini的答案。

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


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

编辑:这在批量中是可能的。请参见Aacini的答案。

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


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

虽然这个主题有点老,但我刚刚发现了它。这是一个运行良好的纯批处理文件解决方案:

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

@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
@echo关闭
setlocal EnableDelayedExpansion
如果“%1”eq“动画化”转到%1
对于('echo prompt$H^ | cmd')中的/F%%a,请设置“BS=%%a”
对于('copy/Z'%~F0“NUL')中的/F%%a,请设置“CR=%%a”
cd>输入文件
启动“/B”%~F0”动画
设置“输入=”
:nextKey
设置“键=”
对于/F“delims=“%%K in('xcopy/W“%~F0”“%~F0”2^>NUL'),如果未定义键集,则执行“键=%%K”
如果“!key:~-1!”eq“!CR!”转到endInput
如果“!key:~-1!”eq“!BS!”(
如果定义了输入集“input=%input:~0,-1%”
)否则(
设置“输入=%input%!键:~-1!”
)
设置/P“=%input%”>input.txtNUL
ping-n1-w300 localhost>NUL
ping-n1-w300 localhost>NUL
转到环路

在这个解决方案中,动画“logo”被横幅取代,但显示一系列文件的方法实际上是相同的。

虽然这个主题有点老,但我刚刚发现了它。这是一个运行良好的纯批处理文件解决方案:

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

@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
@echo关闭
setlocal EnableDelayedExpansion
如果“%1”eq“动画化”转到%1
对于('echo prompt$H^ | cmd')中的/F%%a,请设置“BS=%%a”
对于('copy/Z'%~F0“NUL')中的/F%%a,请设置“CR=%%a”
cd>输入文件
启动“/B”%~F0”动画
设置“输入=”
:nextKey
设置“键=”
对于/F“delims=“%%K in('xcopy/W“%~F0”“%~F0”2^>NUL'),如果未定义键集,则执行“键=%%K”
如果“!key:~-1!”eq“!CR!”转到endInput
如果“!key:~-1!”eq“!BS!”(
如果定义了输入集“input=%input:~0,-1%”
)否则(
设置“输入=%input%!键:~-1!”
)
设置/P“=%input%”>input.txtNUL
ping-n1-w300 localhost>NUL
ping-n1-w300 localhost>NUL
转到环路

在此解决方案中,动画“徽标”被横幅所取代,但显示一系列文件的方法实际上是相同的。

您应该阅读
start
命令的说明,尤其是
/B
开关。请参阅下面我的答案……您应该阅读
start
命令的说明,尤其是
/B
开关。请看下面我的答案。。。