[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
2楼的高手
echo.!L%%a!
是什么意思?能指点一下吗?

TOP

很精彩的讨论啊,学习了~~~

TOP

回复 10楼 的帖子

注意记事本的编码格式,一定要是ANSI编码,如果是UNICODE编码会出错。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4楼 的帖子

成功了,刚才好像是我的记事本出了问题,无论写什么程序都出错
再次谢谢了

TOP

set /p 参数用法:
set /p <变量名>="提示信息"
其中变量名可省略,提示信息不会赋值给变量,赋给变量的值是你输入的值。

特殊:
  一、set 与参数 /p 之间的空格可省略;
  二、变量名可省略,用来专门输出提示信息;
  三、可指定从 nul 设备中输入,与第二点结合相当于不换行的 echo (当然这时不省略变量名也可);
  四、指定从文件中输入,相当于将文件的第一个非空行内容赋值给变量。

<nul,涉及到重定向
用法
作用 或 效果相当于
set /p ala=输入字母:set /p ala=输入字母:<con
二者略有区别,不必深究。详细参考搜索重定向。
set/p num=提示<num.txt将 num.txt 的第一个非空行内容赋值给变量 num;但 “提示” 这两个字不会赋给它。
与 set/p num=<num.txt 唯一不同之处是前者会输出 “提示” 这两个字。
set/p=输出内容<nulset /p var=输出内容<nul
空设备是没有内容的,因此 “输出内容” 这四个字并不会赋值给变量 var。
但由于提示信息即 “输出内容” 是会显示的,因此相当于 [echo 输出内容] 但没有换行。


综上所述:
@echo off
echo 输入选择:
set /p var=
pause
@echo off
set /p var=输入选择:
pause
前者有换行
set /p str=信息<nul
set/p=信息<nul
echo+|set/p=信息
echo 信息
后者有换行


[ 本帖最后由 wxcute 于 2009-1-13 19:35 编辑 ]

TOP

谢谢你们的教导,宛如提醐灌顶。
我一定好好学习批处理,希望有朝一日能成为像你们这样的高手

TOP

set /p var=abcd<nul
为什么没有给var赋值,我是这样理解的
set /p var=请输入
如果在此时你输入任何内容,如 abc 再回车,那么此时 var的值就是 “abc” 而不是 “请输入abc”
同理, set /p var=abcd<nul  语句中 abcd 应该就相当于 set /p var=请输入 中的 “请输入” 而 <nul 则相当于回车。
总结就是
set /p var=abcd  此时是等待用户输入即:给var赋值,而 <nul 是代表从空设备输入也就是没有输入内容,但还是输入了,也是相当于按了回车,等同 set /p var=abcd<a.txt (注:a.txt文件内容为空)
如下代码同样输出不换行
  1. @echo off
  2. cd.>c.txt
  3. set /p var=1234<nul
  4. set /p var=abcd<c.txt
  5. echo 5678
  6. pause
复制代码

[ 本帖最后由 随风 于 2009-1-13 19:31 编辑 ]
技术问题请到论坛发帖求助!

TOP

分析的很好,感谢你写出来大家一起分享。和你的情况差不多,我也是刚学批处理不久就碰到此题了,同样是学过C,并且自己做出来的方法就是用echo。也曾为发现set /p的妙用而欣喜。我想学习就是要有探索的精神,保持下去,假以时日,你也会成为高手的,一起努力!
     对于以上的set /p的用法,我来补充几点:
     1、set /p=...<nul并不是可以代替echo,它们的区别在于前者并不换行。
     2、set /p=...<nul表示从空设备读入值,等同于set /p var=...<nul。但要注意的是,此句并没有把值赋予var,原因我还不清楚,也没找到比较权威的解释,明白此点可以省去些无谓的代码。
     3、利用此句set /p=可以实现一些特殊的要求,比如想要只输入回车符程序才继续执行,其他输入任何字符都对程序无影响。或者在某种程度上可以代替pause>nul。
     4、利用此句set /p var=<a.txt,可以把a.txt中第一行的值赋予变量var,这种情况下可以代替for命令。
     5、set /p=...<nul可以屏蔽一些特殊的字符,如果往一个文件中写入字符串,对于echo无法实现的特殊字符,此句可以实现。
     另外set /a,set命令等还有许多性质,只要在自己实践中细心总结,会有很多收获的。加油!
1

评分人数

TOP

还是不行啊,我用的也的xp sp3(ghost安装的)
请问一下*.bat和*.cmd 有什么区别?

[ 本帖最后由 Batcher 于 2009-5-16 13:32 编辑 ]

TOP

回复 3楼 的帖子

存为 xx.cmd 试试,我这儿可以[XP SP3]
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /l %%a in (1 1 9) do (
  4.  for /l %%b in (1 1 %%a) do (
  5.   set/a res=%%a*%%b
  6.   set "res=!res! "
  7.   set "L%%a=!L%%a!%%bx%%a=!res:~0,2! "
  8.  )
  9.  echo.!L%%a!
  10. )
  11. pause>nul
复制代码
结果:
1x1=1  
1x2=2  2x2=4  
1x3=3  2x3=6  3x3=9  
1x4=4  2x4=8  3x4=12 4x4=16 
1x5=5  2x5=10 3x5=15 4x5=20 5x5=25 
1x6=6  2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 
1x7=7  2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 
1x8=8  2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 
1x9=9  2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81


[ 本帖最后由 wxcute 于 2009-1-13 16:34 编辑 ]

TOP

“关键是 set /p 显示时能不换行”  谢谢版主大人指出
可我在运行你的程序时没有显示结果,是不是哪里出了点小问题。

TOP

“就像地主向农民催租一样” 这个比喻真牛!

关键是 set /p 显示时能不换行。

当然九九乘法表用 echo 也能做到(namejm 基础上改的):
  1. @echo off&setlocal enableDelayedExpansion
  2. for /l %%a in (1 1 9) do (
  3.  for /l %%b in (1 1 %%a) do (
  4.   set/a res=%%a*%%b
  5.   set "res=!res! "
  6.   set L%%a=!L%%a!  %%ax%%b=!res:~0,2!
  7.  )
  8.  echo.!L%%a!
  9. )
  10. pause>nul
复制代码

TOP

返回列表