中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于set命令的几点疑惑(已解决)
« [1] [2] [3] »
作者:
标题: 关于set命令的几点疑惑(已解决) 上一主题 | 下一主题
hangyug
初级用户




积分 99
发帖 43
注册 2007-1-12
状态 离线
『楼 主』:  关于set命令的几点疑惑(已解决)

学习批处理,学到了set命令,一头雾水,在论坛里搜索了一下,是有一些set方面的,但是看了之后还是不太懂,自带的帮助也看了,感觉还是不太懂。哪位有好一点的set的教程啊?发个连接也可以,先谢过了。

[ Last edited by namejm on 2007-1-20 at 08:07 PM ]

2007-1-21 00:38
查看资料  发送邮件  发短消息 网志   编辑帖子
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  

哪里不懂提出来啊。总有人能解答的吧?



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-1-21 00:43
查看资料  发送邮件  发短消息 网志   编辑帖子
timlee
新手上路





积分 16
发帖 8
注册 2007-1-20
状态 离线
『第 3 楼』:  

说出来我们也好学习学习.

2007-1-21 00:48
查看资料  发送邮件  发短消息 网志  OICQ (21751299)  编辑帖子
hangyug
初级用户




积分 99
发帖 43
注册 2007-1-12
状态 离线
『第 4 楼』:  

问题都很菜,希望大家有点耐心。。。呵。。
问题一:
set a=
set/p a=请输入关键字……  
start http://www.baidu.com/s?wd=%a%
自带的帮助是这样写的:SET /P variable=[promptString]
那第一句等号右边怎么什么都没有?那到底把什么指派给变量a了?
还有这么一句:”set命令不容许变量含有等号“怎么理解?
问题二:
看到这样一个帖子:
set "STARTPRGNAME=%STARTPRGNAME:"=%"
语句中:"=%"表示什么意思?

if /i "%STARTPRGNAME%" == "cmd" goto :cmd_exe
语句中/i表示什么意思?

if not "%STARTPRGNAME:.bat=%" == "%STARTPRGNAME%" goto :cmd_or_bat
语句中:.bat表示什么意思?

第一句中:set后面的语句为何用引号括起来?代表什么?还有,等号右边的
%STARTPRGNAME的意思是把什么指派给等号左边的STARTPRGNAME了?
第二句中:"%STARTPRGNAME%"是怎么回事?它和%%1有什么区别?

   此帖被 +1 点积分    点击查看详情   
评分人:【 lokeymei 分数: +1  时间:2008-11-8 12:59


2007-1-21 01:16
查看资料  发送邮件  发短消息 网志   编辑帖子
0401
中级用户

带走



积分 435
发帖 88
注册 2005-9-24
状态 离线
『第 5 楼』:  

HoHo~我比较适合回答这种基础题目

关于问题一你自己动手试试就知道了。
第一句[set a=]本意就是想将变量a置空,所以等号右边当然什么都没有了。其实就是删除变量a拉。
第二句的[/p]表示读取用户的输入,并且赋值给变量a。[请输入关键字…… ]这句话是提示给用户看的。也就是说你执行[set/p a=请输入关键字……  ]后,屏幕显示[请输入关键字……  ],然后你输入[keyword]并且回车后变量a的值就是[keyword]了。你增加一句[echo %a%]就了解了。
关于[set命令不容许变量含有等号]这句好理解,像上面的a就是变量名,你说你能设置一个变量名为[a=]的吗?

问题二:
你仔细查看[set]的帮助会看到这么句[%PATH:str1=str2%],意思是将变量[path]中的所有字符或字符串[str1]换成[str2],帮助中还说["str2" 可以是空的。]。举个例子,变量[a]值为[0401]执行[set c=%a:0=%]后,变量[c]的值为[41]。
于是这句[set "STARTPRGNAME=%STARTPRGNAME:"=%"]就可以理解为删除变量[STARTPRGNAME]中的所有引号并将处理后的值仍赋给[STARTPRGNAME]。有引号是因为它要处理的字符是个["]。

继续。。。
[if]中的[/ i]表示不区分大小写。这个好理解,楼主你也太懒了。
再接下来的这句跟上面的变量替换一个意思,再举个例子,假设变量[STARTPRGNAME]值为[hehe.bat],那么[%STARTPRGNAME:.bat=%]==[hehe],意思可能是这样(我猜的):如果是.bat文件则跳到这里[:cmd_or_bat]。

回答最后一行。
[%STARTPRGNAME%]就是扩展变量[STARTPRGNAME]的值,其实就是读取变量了。[%%1]只是用来表示[%1],因为在批处理中双写[%]才能得到一个[%],而[%1]意思是该批处理文件的第一个参数。你试试新建一个批处理,比如[tt.bat],文件内容只有一行[@echo %1 是第一个参数],然后用命令行调用看看 [tt.bat hehe]。

打字好累~~

[ Last edited by 0401 on 2007-1-21 at 03:18 AM ]

   此帖被 +31 点积分          点击查看详情   
评分人:【 redtek 分数: +7  时间:2007-1-21 05:19
评分人:【 qzwqzw 分数: +7  时间:2007-1-21 08:48
评分人:【 hangyug 分数: +2  时间:2007-1-23 11:53
评分人:【 wyd531 分数: +2  时间:2007-1-26 03:42
评分人:【 txtrain 分数: +2  时间:2007-2-9 22:06
评分人:【 oilio 分数: +2  时间:2007-2-14 10:06
评分人:【 mtiankong 分数: +2  时间:2007-4-18 09:13
评分人:【 b102588 分数: +2  时间:2007-7-11 21:13
评分人:【 liuyun20 分数: +1  时间:2007-10-20 17:33
评分人:【 regvip2008 分数: +2  时间:2008-1-15 16:40
评分人:【 zyz0304360 分数: +1  时间:2008-1-15 16:59
评分人:【 forkfan 分数: +1  时间:2008-4-6 14:55


2007-1-21 03:13
查看资料  发短消息 网志   编辑帖子
hangyug
初级用户




积分 99
发帖 43
注册 2007-1-12
状态 离线
『第 6 楼』:  

谢谢楼上的耐心回答,辛苦你了。。。问题一我懂了,不过,你可能没看明白我的问题二是什么。
我再说一遍吧。
set "STARTPRGNAME=%STARTPRGNAME:"=%"
语句中:"=%"表示什么意思?

if /i "%STARTPRGNAME%" == "cmd" goto :cmd_exe
语句中/i表示什么意思?

if not "%STARTPRGNAME:.bat=%" == "%STARTPRGNAME%" goto :cmd_or_bat
语句中:.bat表示什么意思?
以上这些都是我看到的一个帖子的内容,其中的问题是写这个帖子的人问的,而我的问题在下面:
第一句中:set后面的语句为何用引号括起来?代表什么?还有,等号右边的
%STARTPRGNAME的意思是把什么指派给等号左边的STARTPRGNAME了?
第二句中:"%STARTPRGNAME%"是怎么回事?
尤其是:它("%STARTPRGNAME%")和%%1有什么区别?学习if时没见有
"%STARTPRGNAME%"形式的参数啊???

[ Last edited by hangyug on 2007-1-20 at 03:50 PM ]

2007-1-21 04:46
查看资料  发送邮件  发短消息 网志   编辑帖子
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 7 楼』:  

两大秘笈:

1.善用搜索

2.多看帮助信息

.....




认识自己,降伏自己,改变自己
,才能改变别人!
2007-1-21 05:19
查看资料  发短消息 网志   编辑帖子
0401
中级用户

带走



积分 435
发帖 88
注册 2005-9-24
状态 离线
『第 8 楼』:  

to 楼主:

我在回答中就看明白你的问题二了,只是你没看懂我的回答。
那我也再说一遍吧。
说之前我想告诉你,如果你可以自己动手试的话,我想你已经知道为什么了。
我之前的回答希望你能再认真看下,我只是再这里再举个例子。
@echo off
set STARTPRGNAME=wInG
echo %%STARTPRGNAME%% 变量值为 %STARTPRGNAME%
set STARTPRGNAME=%STARTPRGNAME:G=gzero%
echo %%STARTPRGNAME%% 变量经过字符替换后为 %STARTPRGNAME%
if %STARTPRGNAME%==wingzero echo 看看这句有没有输出
if /i %STARTPRGNAME%==wingzero echo 这句呢?输出了吧。
pause>nul
不玩了,楼主多看几遍上面的解答吧,我已经很难再表达更低的意思了。

BTW:感谢 redtek  为我打的字加分,呵呵。

[ Last edited by 0401 on 2007-1-21 at 06:30 AM ]

2007-1-21 06:25
查看资料  发短消息 网志   编辑帖子
hangyug
初级用户




积分 99
发帖 43
注册 2007-1-12
状态 离线
『第 9 楼』:  

谢谢0401兄,原来你把我的问题和我所引用帖子中的提问都给回答了,再次感谢你的回复。。。

2007-1-21 08:04
查看资料  发送邮件  发短消息 网志   编辑帖子
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 10 楼』:  

我也要感谢这么热心且耐心的朋友!

2007-1-21 09:00
查看资料  发短消息 网志   编辑帖子
shorterz
初级用户




积分 25
发帖 11
注册 2007-1-23
状态 离线
『第 11 楼』:  

有学了不少,呵呵,继续。。。

2007-1-23 11:36
查看资料  发送邮件  发短消息 网志   编辑帖子
g4rr
初级用户





积分 68
发帖 32
注册 2007-1-24
来自 广东潮州
状态 离线
『第 12 楼』:  

建议多看几个实例就会觉得很容易明白了.

还得注意现在的选择命令跟以前老DOS的不同.

2007-1-24 05:28
查看资料  发送邮件  发短消息 网志   编辑帖子
sjjhhx
初级用户





积分 24
发帖 11
注册 2007-1-13
状态 离线
『第 13 楼』:  

讲得很细,这样我们菜鸟才能明白,谢谢0401兄的耐心和细心!

2007-2-8 09:55
查看资料  发送邮件  发短消息 网志   编辑帖子
anqing
高级用户




积分 859
发帖 413
注册 2006-8-14
状态 离线
『第 14 楼』:  

关于set的解释,5楼讲得很详细,也有例子。
好看一些

2007-2-8 11:18
查看资料  发送邮件  发短消息 网志   编辑帖子
juventusryp
初级用户





积分 88
发帖 40
注册 2006-12-26
状态 离线
『第 15 楼』:  

5楼的讲的很明白啊,我们菜鸟一看就明白

2007-2-14 06:09
查看资料  发短消息 网志   编辑帖子
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: