@echo off
mode con cols=80 lines=30
color 02
:loop
for /l %%j in (1,1,80) do (
set /a Down%%j-=1
if !down%%j! LSS 0 (
set /a Arrow%%j=!random!%%4
set /a Down%%j=!random!%%15+10
)
if "!Arrow%%j!" == "1" (
set /a chr=!random!%%2
set /p=!chr!<NUL
) else (
set /p= <NUL
)
)
goto loop
我看不懂...
能不能讲讲...
setlocal ENABLEDELAYEDEXPANSION
set /p=!chr!<NUL
goto loop
这三句是什么意思...
感觉有点难...
1.首先源程序少了延时赋值这一句
即你要问的 setlocal ENABLEDELAYEDEXPANSION
循环中变量赋值延时进行
2.set /p=!chr!<NUL
这句代表 请用户自动输入,给chr变量赋值为空字符
3. goto loop
表示程序从尾部跳转到头部循环运行,才会出现数字雨的影像。
源程序少了延时赋值这一句,修改后才能正常运行 代码如下:
@echo off
setlocal ENABLEDELAYEDEXPANSION
mode con cols=80 lines=30
color 02
:loop
for /l %%j in (1,1,80) do (
set /a Down%%j-=1
if !down%%j! LSS 0 (
set /a Arrow%%j=!random!%%4
set /a Down%%j=!random!%%15+10
)
if "!Arrow%%j!" == "1" (
set /a chr=!random!%%2
set /p=!chr!<NUL
) else (
set /p= <NUL
)
)
goto loop
首先是setlocal ENABLEDELAYEDEXPANSION 启用延迟的环境变量
因为批处理是一条命令一条命令向下执行 也就是说你不可以在同一行命令中既给变量赋值 又读取它的值
而启用延迟的环境变量 便可以做到 ,set /p=!chr!<NUL 整条命令的意思是自动输出变量chr值,因为启用延迟的环境变量, 变量%%%%用!! 代替
goto loop 跳转到 loop:标签 就是循环
1.setlocal ENABLEDELAYEDEXPANSION
启用 延缓环境变量 扩展
启用以后,可以得到 变量在运行时扩展变量的值,而不是只取一次,看一下例子:
比如,当前目录下有两个文件a.txt和b.txt
没有启用时:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
只会显示"b.txt",因为没有启用扩展,只能把LIST变量设置成找到的最后一个文件。
启用以后:(需要使用!LIST!的形式,而不是%LIST%的形式)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
会显示"a.txt b.txt",LIST变量就包括了当前目录下的所有文件的列表。(以空格分隔的)
--
2.set /p=!chr!<NUL
/p 允许将变量数值设成用户输入的一行。
就是需要由用户通过键盘输入。
比如:set /p=Your Name?
就会显示 Your Name?同时等待你的输入。
!ch!,前面说过了,就是扩展取得当前的chr变量值。(作为要输入的内容)
<,是输入重定向符,表示由它后面所指定的设备输入。
NUL是空设备。
写成<NUL,这就相当于,自动由键盘输入一个回车,也就完成了把!chr!扩展后,再次显示出来的效果。
--
3.goto loop
就是英文的意思,让程序的流程,转移到loop标签(即 ":loop")处,继续执行。
setlocal ENABLEDELAYEDEXPANSION
通知CMD要启用延迟的环境变量
set 为变量赋值
goto loop
是指跳转到 上面代码的第四行 loop:标签处
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息