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
开关。请看下面我的答案。。。