永发信息网

批处理数字雨

答案:4  悬赏:20  手机版
解决时间 2021-06-05 04:45
  • 提问者网友:放下
  • 2021-06-04 10:57

@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

这三句是什么意思...

感觉有点难...


最佳答案
  • 五星知识达人网友:狂恋
  • 2021-06-04 11:23

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

全部回答
  • 1楼网友:撞了怀
  • 2021-06-04 14:42

首先是setlocal ENABLEDELAYEDEXPANSION 启用延迟的环境变量

因为批处理是一条命令一条命令向下执行 也就是说你不可以在同一行命令中既给变量赋值 又读取它的值

而启用延迟的环境变量 便可以做到 ,set /p=!chr!<NUL 整条命令的意思是自动输出变量chr值,因为启用延迟的环境变量, 变量%%%%用!! 代替

goto loop 跳转到 loop:标签 就是循环

  • 2楼网友:舍身薄凉客
  • 2021-06-04 13:41

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")处,继续执行。

  • 3楼网友:摆渡翁
  • 2021-06-04 13:01

setlocal ENABLEDELAYEDEXPANSION

通知CMD要启用延迟的环境变量

set 为变量赋值

goto loop

是指跳转到 上面代码的第四行 loop:标签处

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯