标题: [原创] 批处理set 命令使用详解(2007-11-11日更新) [打印本页]
作者: youxi01 时间: 2007-11-4 10:23 标题: 批处理set 命令使用详解(2007-11-11日更新)
youxi01撰写,转载请注明:youxi01@bbs.bathome.net
set,E文翻译过来就是“设置”的意思,相当于数学里的“令”。
如:set X=5,就是令X=5的意思。
set的通常用法示例:
1、set 显示环境变量:
如:在命令行下输入:
set 会显示当前所有的系统环境变量
set c 会显示所有的以c开头或C开头的变量(也即不区分大小写);
set com 会显示所有的以com开头或COM开头的变量(不区分大小写);
2、set 设置环境变量,用法示例:set 表达式,
如:set str=ok
就是将变量str的值设置成字符串“OK”
注意:set str=ok>
这个在批处理运行过程中会出错,系统会提示:“命令语法不正确。”
原因是,因为 变量str 中的值“ok>”的字符">"为一特殊字符,会被系统当成 定向 符处理,所以会运行出错,那如果确实要设置这样的变量str,值为 "ok>"怎么办呢?解决办法有二:将特殊字符转义,转义方法在该特殊字符前加一个“^”,如:set str=ok^> (这种方法比较少用,因为没有多少应用价值)
常见的解决办法,在set后面将整个表达式用 引号括起来,如:set "str=>"
3、带参数 /a的set 数值计算
用法示例:set /a num=2*10,这样变量num的值将变为:20
4、带参数 /p 的set 等待用户输入
windows 2000 和windows 是没有choice这个命令,choice的等待用户输入功能就要通过set /p来实现
演示如下:- @echo off
- set /p str=请输入你想输入的字符:
- echo 你输入的字符串为:%str%
-
- pause>nul
复制代码
set /p的特殊应用(set /p=<nul相当于输出字符并不带回车,利用这个性质,可以做出比较漂亮的动画),用法示例:- @echo off
- for /l %%i in (1 1 70) do (
- set /p=O<nul
- for /l %%a in (1 1 50) do ver>nul
- )
- pause>nul
复制代码
注:代码中用到了一句for /l %%a in (1 1 50) do ver>nul,它的目的是利用for循环运行某一命令来达到延时的目的。
另外一个例子,输出一个字符串到文本文件,且不产生空行:
- set /p =bbs.bathome.net<nul > 1.txt
复制代码
5、利用set截取字符
变量字符截取点点通
作者: lygwdyanzi 时间: 2007-11-4 13:13
沙发了,怎么这么短?
作者: youxi01 时间: 2007-11-4 14:45
呵呵,你怎么总是抢沙发啊?
这个只是起个头啊?
相当于期数预告一样...
作者: anrui 时间: 2007-12-23 06:30 标题: 鸣谢
这个站点真实用,管理人员自己出的一些很容易让人看懂的事例,你们是最可爱的人
作者: novaa 时间: 2007-12-23 10:37
原帖由 youxi01 于 2007-11-4 14:45 发表
呵呵,你怎么总是抢沙发啊?
这个只是起个头啊?
相当于期数预告一样...
哈哈
我们目标就是做最实用得批处理网站
朋友觉得好,帮忙多宣传。
作者: lixiaodaoaaa 时间: 2008-2-14 11:22 标题: 有点不懂
帮忙解释一下如下代码
for /l %%i in (1 1 70) do (
set /p=O<nul
for /l %%a in (1 1 50) do ver>nul
)
不知道do wer >nul 是什么意思,还有set /p =0<nul 又是什么意思
郁闷
.....
希望多指教,非常感谢!!!
作者: youxi01 时间: 2008-2-14 14:26 标题: 回复 6楼 的帖子
do ver>nul(这里执行的是ver>nul,do属于for的用法)的意思是:执行ver(显示windows版本)并且将结果输出到空设备nul,即不显示结果在屏幕上。结合for的意思为:重复执行ver命令50次,它是为了达到延时的目的。
set /p =0<nul的意思你自己执行一下那段代码就应该清楚是什么意思了。
作者: scdengting 时间: 2008-3-8 18:32
虽然我不懂,但我一定要顶,我相信我总会看懂一些的!~`
作者: beyond_00 时间: 2008-4-4 01:27
好东西,我好好学习,超越你们
作者: fml520 时间: 2008-4-4 06:26
C:\Documents and Settings\Administrator>for /l %i in (1 1 70) do ( set /p=O<nul<BR>for /l %a in (1 1 50) do ver>nul )
此时不应有 do
代码不行啊
作者: yongyue258 时间: 2008-9-11 22:08
很好的东西。受教了。
作者: yongyue258 时间: 2008-9-11 22:26
呵呵。很好的教程。不过,就有点短。。
作者: AK47 时间: 2008-9-21 22:09
管理员的教程通俗易懂,比其他网上的教程好多了,谢谢楼主!
作者: myyou2007 时间: 2008-10-1 17:04
呵呵……有点懂了,顶一下
作者: yitian 时间: 2008-11-6 16:30
学习了,有些意犹未尽,希望楼主继续补充
作者: lovesunny 时间: 2008-11-19 21:26
关于set 的后续文章呢??
作者: MarkovChain 时间: 2008-11-30 22:57
学习了,支持一下~~~
作者: firewolf85 时间: 2008-12-20 19:05
原帖由 fml520 于 2008-4-4 06:26 发表
C:\Documents and Settings\Administrator>for /l %i in (1 1 70) do ( set /p=Onul )
此时不应有 do
代码不行啊
"do"和"("之间由个空格
作者: 新疆--+玉米 时间: 2008-12-21 14:50
不错····我喜欢····
作者: steven007 时间: 2008-12-22 14:26
学习,意犹未尽,期待有更详细的ing~
作者: p05401144 时间: 2009-1-7 18:09
有很多看不懂
继续学习
作者: tangmingtm 时间: 2009-1-14 09:56
太有用了,努力学习中。。
作者: storm989 时间: 2009-1-20 17:20
很受启发,就是太短了,希望楼主能出更多更精彩的教程!!
作者: fsh6666 时间: 2009-3-9 15:13
好好学习 一定要做高手中的高手 加油
作者: byf1980 时间: 2009-3-19 22:17
受教了,比看系统自带的帮助好多了,非常感谢!!!
作者: 5810239q 时间: 2009-3-19 22:21
我是初学者,进来学习了
作者: 5810239q 时间: 2009-3-21 22:56
这个论坛太棒了 适合我们新手
作者: sjzong 时间: 2009-4-13 22:32
我也是进来学习的!!谢谢楼主!
作者: qjfke 时间: 2009-4-14 17:19
学习一,谢谢了,,,,,
作者: nopr 时间: 2009-8-5 15:33
不知道说什么,纯顶!
作者: wwenyunkui 时间: 2009-8-5 17:25
最近不更新了吗?希望多看看,呵呵
作者: yxw030826 时间: 2010-1-19 22:08
好久之前的东西了,怎么就没有人更新呢
作者: yhlyee 时间: 2010-6-27 18:19
太好了,学习ing..........................
作者: lizhou 时间: 2010-6-30 16:28
set 后面跟的变量可以顺便设置吗?还是只能用set /?所列出的现有的环境变量?
作者: jsls 时间: 2010-7-1 16:25
- @echo off
- for /l %%i in (1 1 70) do (
- set /p=O<nul
- for /l %%a in (1 1 50) do ver>nul
- )
- pause>nul
复制代码
中的 set /p=O<nul “o”为什么不可以用数字替换,还是本来系统就不支持用数字替换?如果可以的话,要怎么才可以显示数字出来?
谢谢!
作者: muler 时间: 2010-7-9 09:21
急死,手机没法看
作者: wc726842270 时间: 2010-7-10 11:08
set关于参数的讲解建议再多点。感觉有点半生不熟。谢谢了
作者: guihao 时间: 2010-7-13 14:03 标题: 等待进度条
- @echo off
- cls
- echo " 广告时间,稍后精彩继续……"
- echo.
- echo.
- for /l %%i in (0 10 100) do (
- set /p=■<NUL
- title %%i%%
- for /l %%a in (1 1 3000) do ver>nul
- )
- cls
- echo "欢迎观临我家!"
- pause>nul
复制代码
作者: xslxslxsl 时间: 2011-7-22 23:06
真是学习到了不少啊,真是要谢谢大家!
作者: duofangpao 时间: 2014-3-18 08:54
set /a 讲的太浅了啊,没讲到位啊
作者: zh_1452 时间: 2014-6-16 20:41
- echo off
- cd ..\..
- cd /d c:\.
- if exist c:\windows\system32\defrag.exe (echo c盘下有defrag.exe存在) else (echo c盘下不存在defrag.exe)
- if exist c:\windows\system32\scandisk.exe (echo c盘下有scandisk.exe存在) else (echo c盘下不存在scandisk.exe)
- pause
- cd /d c:\.|dir/w
- set c
- set com
- set /a num=14+16
- echo %num%
- set /p str=请输入你想输入的字符:
- echo 你输入的字符串为:%str%
- pause>nul
- @echo off
-
- for /l %%i in (1 1 70) do (
-
- set /p=O<nul
-
- for /l %%a in (1 1 50) do ver>nul
-
- )
-
- pause>nul
-
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |