[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

一个批处理题目里受到的启发: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

评分人数

又进了一小步

感谢各位的高见,是我等菜鸟获益匪浅!

TOP

随风老大,现身吧,看了你好多帖子,写的很好很通俗易懂啊,期待在你的指导下我也成为一个批处理高手

TOP

set "res=!res!  " %======此处用来对齐=========%
                set/p=%%ax%%b=!res:~0,2!  <nul
第一句对齐具体是怎么实现的啊?第二局的!res:~0,2!,这部分的命令语法是什么。谢谢大家

TOP

讨论的十分精采。把我多日对SET /P的不理解彻底澄清了

TOP

讨论很精彩

真的让我弄懂很多东西,谢谢!

TOP

namejm的代码确实很完美,我就没有想到要对齐的问题
我是一只小菜鸟,飞到东来飞到西……

TOP

现在基本上,,我一点都不懂。。以后努努学习。只知道回贴就OK了!

TOP

俺都看不懂的,努力学习中

TOP

关于批量修改文件名

列如:我想把某目录下的一个文件夹下所有文件夹里的文件,只要文件名字中带有"大家好"字样的文件全部替换成"你们好"
请问大家该如何写批命令,万分感谢!

TOP

看来要认真点才可以的!

TOP

批处理真是难学呀!幸好有这么好的教程

TOP

我的理解

set /p =aaa<nul
我的理解是:
1、从空设备读入空内容给空变量,即然是空内容,所以不换行。不能把<nul理解为回车,回车换行,而<nul是不换行的
2、=后面的是提示文字,是用来和用户进行交流的,只显示不赋值。

TOP

回复 14楼 的帖子

多看教程

什么是延迟环境变量扩展?
http://bbs.bathome.net/thread-3083-1-1.html

变量延迟详解
http://bbs.bathome.net/thread-2898-1-1.html

什么情况下该使用变量延迟
http://bbs.bathome.net/thread-2899-1-1.html

一个变量嵌套变量的问题
http://bbs.bathome.net/thread-2900-1-1.html

什么时候使用延迟变量?为什么要使用?
http://bbs.bathome.net/viewthread.php?tid=112

延迟变量通俗解释
http://bbs.bathome.net/viewthread.php?tid=354
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

@echo off
echo 1x1=1  
echo 2x1=2   2x2=4   
echo 3x1=3   3x2=6   3x3=9   
echo 4x1=4   4x2=8   4x3=12  4x4=16  
echo 5x1=5   5x2=10  5x3=15  5x4=20  5x5=25  
echo 6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36  
echo 7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49  
echo 8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64  
echo 9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81
pause  


我实在看不懂 什么是延迟变量  谁能用超通俗的语言讲一下么,
set "res=!res! "
  set "L%%a=!L%%a!%%bx%%a=!res:~0,2! "
这两句什么意思啊  
本人头脑愚钝,希望各位老师讲一下么

TOP

返回列表