一个批处理题目里受到的启发:set /p 输出指定格式文本
今天在做“输出9*9口诀”时受到了一些启发,现在与广大菜鸟同志们一起分享。
因为学过C语言,所以我在做这个题目时并不感到困难,下面是我做的答案:
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,9) do (for /l %%b in (1,1,9) do (set/a res=%%a*%%b&echo %%a*%%b=!res!))
pause
(说一下,我在做的时候把!res!写成%res%,总是得不到结果,后来查了资料才知道在引用延迟变量时一点要用!!,所以我在这里再啰嗦一次:细节很重要。)
就在我为自己又做出一道题目而窃窃自喜的时候,namejm的答案彻底的让我笑不出来了:
@echo off &setlocal enabledelayedexpansion
for /l %%a in (1 1 9) do (
for /l %%b in (1 1 %%a) do (
set/a res=%%a*%%b
set "res=!res! " %======此处用来对齐=========%
set/p=%%ax%%b=!res:~0,2! <nul
)
echo.
)
pause>nul
运行结果如下:
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
实在是太完美了!!!
在我认真研究了程序后,有了一个发现,他竟然是用set /p来做输出的,实在太有创意了!!!
现在我把我对set/p=%%ax%%b=!res:~0,2! <nul 的理解分享一下:
set /p 是让用户输入字来符赋予变量的命令,这里并没有变量,所以直接显示后面的内容,但显示完了以后set /p还是会向你要输入(就像地主向农民催租一样),怎么办呢?这时<nul就起作用了
查资料得:
<:重新定向输入,从文本中读入输入命令,而不是从键盘中读入
所以<nul就是禁止输入的意思,就搞定了(解放了,不用交租了)
通过这里我得到一个启发,用 set /p="要显示的内容" <nul 可以代替echo,甚至由于set命令可以进行字符串截取,使它在用来作输出显示时,比echo更强大。
由于水平有限,如果有什么错误,还请老鸟们不吝指正,以免误导新人。
[ 本帖最后由 p05401144 于 2009-1-13 10:31 编辑 ] |
-
2
评分人数
-