Board logo

标题: 关于set命令的几点疑惑(已解决) [打印本页]

作者: hangyug     时间: 2007-1-21 00:38    标题: 关于set命令的几点疑惑(已解决)

学习批处理,学到了set命令,一头雾水,在论坛里搜索了一下,是有一些set方面的,但是看了之后还是不太懂,自带的帮助也看了,感觉还是不太懂。哪位有好一点的set的教程啊?发个连接也可以,先谢过了。 [ Last edited by namejm on 2007-1-20 at 08:07 PM ]

作者: ccwan     时间: 2007-1-21 00:43
哪里不懂提出来啊。总有人能解答的吧?

作者: timlee     时间: 2007-1-21 00:48
说出来我们也好学习学习.

作者: hangyug     时间: 2007-1-21 01:16
问题都很菜,希望大家有点耐心。。。呵。。 问题一: set a= set/p a=请输入关键字…… start 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有什么区别?

作者: 0401     时间: 2007-1-21 03:13
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 ]

作者: hangyug     时间: 2007-1-21 04:46
谢谢楼上的耐心回答,辛苦你了。。。问题一我懂了,不过,你可能没看明白我的问题二是什么。 我再说一遍吧。 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 ]

作者: tao0610     时间: 2007-1-21 05:19
两大秘笈: 1.善用搜索 2.多看帮助信息 .....

作者: 0401     时间: 2007-1-21 06:25
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 ]

作者: hangyug     时间: 2007-1-21 08:04
谢谢0401兄,原来你把我的问题和我所引用帖子中的提问都给回答了,再次感谢你的回复。。。

作者: kafen     时间: 2007-1-21 09:00
我也要感谢这么热心且耐心的朋友!

作者: shorterz     时间: 2007-1-23 11:36
有学了不少,呵呵,继续。。。

作者: g4rr     时间: 2007-1-24 05:28
建议多看几个实例就会觉得很容易明白了. 还得注意现在的选择命令跟以前老DOS的不同.

作者: sjjhhx     时间: 2007-2-8 09:55
讲得很细,这样我们菜鸟才能明白,谢谢0401兄的耐心和细心!

作者: anqing     时间: 2007-2-8 11:18
关于set的解释,5楼讲得很详细,也有例子。 好看一些

作者: juventusryp     时间: 2007-2-14 06:09
5楼的讲的很明白啊,我们菜鸟一看就明白

作者: netchxing     时间: 2007-2-14 09:05
5楼的讲的很明白啊,我们菜鸟一看就明白

作者: hxmupdata     时间: 2007-3-13 02:22
问的好,答的更好。加分加的好 ,学了不少了。。。。

作者: jackyggt     时间: 2007-3-13 08:21
灌水

作者: Billunique     时间: 2007-3-21 07:23
关于扩展名的判断很受学习 多谢前辈!

作者: fd2000     时间: 2007-4-2 08:27
Originally posted by 0401 at 2007-1-20 02:13 PM: HoHo~我比较适合回答这种基础题目 关于问题一你自己动手试试就知道了。 第一句[set a=]本意就是想将变量a置空,所以等号右边当然什么都没有了。 ...
0401是个不错的老师,很有耐心,值得我们学习,就是有的学生上课不仔细听。呵呵。

作者: myth126     时间: 2007-4-2 10:11
下面这段代码怎么理解呀?好多特殊符号的用法,请叫各位了!先行谢过! setlocal enabledelayedexpansion for %%i in ("%tmp%\encrypt.tmp") do ( echo %%~zi >nul 2>nul set size=%%~zi set num=!size:~-1! set /a mod=!num!%%2 if !mod! equ 0 (goto even) else (goto odd) )

作者: jz1043     时间: 2007-4-9 05:41
我也学到东西了,谢谢讲解

作者: fyb198351     时间: 2007-4-17 07:31
学了不少的东西~~~~

作者: Vampire     时间: 2007-4-18 07:48
Originally posted by myth126 at 2007-4-1 09:11 PM: 下面这段代码怎么理解呀?好多特殊符号的用法,请叫各位了!先行谢过! setlocal enabledelayedexpansion for %%i in ("%tmp%\encrypt.tmp") do ( echo %%~zi >nul 2&g ...
希望高手回答下,我也有些不懂,大概第三行echo %%~zi >nul 2>nul不晓得啥意思。

作者: mtiankong     时间: 2007-4-18 09:37
Originally posted by Vampire at 2007-4-17 06:48 PM: 希望高手回答下,我也有些不懂,大概第三行echo %%~zi >nul 2>nul不晓得啥意思。
大概意思就是不显示%i的文件大小,出现错误也不显示。

作者: qiwei201     时间: 2007-4-20 00:14
学习了,我又学到一些东西

作者: htysm     时间: 2007-4-20 00:55
将变量%%i扩展到文件的大小。for /?中有说明: 带有修改程序的变量 说明 %~I 展开删除任何前后引号 ("") 的 %I。 %~fI 将 %I 展开到完全合格的路径名。 %~dI 只将 %I 展开到驱动器号。 %~pI 只将 %I 展开到路径。 %~nI 只将 %I 展开到文件名。 %~xI 只将 %I 展开到文件扩展名。 %~sI 展开路径以只包含短名称。 %~aI 将 %I 展开到文件的文件属性。 %~tI 将 %I 展开到文件的日期和时间。 %~zI 将 %I 展开到文件大小。 %~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开到第一个找到的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改程序扩展成空字符串。 下表列出可用来获得综合结果的修改程序组合。 变量(使用组合的修改程序) 说明 %~dpI 只将 %I 展开到驱动器号和路径。 %~nxI 只将 %I 展开到文件名和扩展名。 %~fsI 将 %I 展开到只包含短名称的完整路径名。 %~dp$PATH:I 在 PATH 环境变量中所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径。 %~ftzaI 将 %I 展开到输出行(如 dir一样)。

作者: ccuu668     时间: 2007-5-2 16:01
比较适合我们这些新手.不过说实话有的地方我都还看不懂到底是什么意思.唉!只有自己慢慢来了. 再次我也特别感谢一楼的GG,你真的是一比较热心的网友.精神值得我们去学习.

作者: yunsenjhl     时间: 2007-7-10 22:19
5分钟以前刚刚有些理解set的用途

作者: 6622186     时间: 2007-7-11 17:42
只有把 set 命令弄懂了, 才能写出好的东西.

作者: bbq5201     时间: 2007-8-9 23:49
学到不少东西哦.. 真感谢

作者: flamemperor     时间: 2007-9-10 11:43
Originally posted by 0401 at 2007-1-21 03:13 AM: 问题二: 你仔细查看[set]的帮助会看到这么句[%PATH:str1=str2%],意思是将变量[path]中的所有字符或字符串[str1]换成[str2],帮助中还说["str2" 可以是空的。]。举个例子,变量[a]值为[0401]执行[set c=%a:0=%]后,变量[c]的值为[41]。 于是这句[set "STARTPRGNAME=%STARTPRGNAME:"=%"]就可以理解为删除变量[STARTPRGNAME]中的所有引号并将处理后的值仍赋给[STARTPRGNAME]。有引号是因为它要处理的字符是个["]。
请问,[%PATH:str1=str2%]中的这个str1允许是变量么?

作者: flamemperor     时间: 2007-9-10 14:01
set var1=abc set var2=bc set var=%var1:var2=% @echo %var% 这样写好像var的值并不是a。

作者: Li103Z     时间: 2007-11-18 08:56
讲得详细,菜鸟明白

作者: rodane     时间: 2007-11-28 15:29
5楼回答的很详细

作者: gamefjq     时间: 2007-11-29 11:58    标题: xiexie

详细

作者: regvip2008     时间: 2008-1-15 16:45
确实是讲得非常的仔细!让人一目了然!

作者: zyz0304360     时间: 2008-1-15 17:00
0401 菜鸟的好朋友

作者: zyz0304360     时间: 2008-1-15 17:00

作者: TBAGE     时间: 2008-1-15 20:11
关注`学习中...

作者: pkwwda     时间: 2008-1-16 13:08    标题: 谢谢

学习了

作者: 313885174     时间: 2008-1-16 13:21
原来是这样.

作者: SamuelFish     时间: 2008-1-22 18:09
5楼的说得清楚些,谢了

作者: lokeymei     时间: 2008-11-8 13:01    标题: 学习中

对于我有很大的帮助,,,谢谢

作者: oathever     时间: 2008-12-7 17:17    标题: 不错哈....

0401 这位兄弟倒是热心... 不错哈. . 学到了不少东西... 其实我也是初学者.,. 呵呵,,, 多多看看贴子!!!