再谈“%date:~0,10% 的使用”首页 系统管理脚本 管理 脚本 set _p %date之前我曾经写过一个关于“%date:~0,10% 的使用方法的帖子,见于 http://gnaw0725.blogbus.com/logs/4888707.html,今天无意中翻到 set的帮助,竟然发现它的用法原来是SET命令的扩展集中众多用法之一,霍霍,看样子越是手边的东西,就越不容易注意到。 也证实了之前我在上面帖子中提到的“~,”左右取舍的方法,确实有误,应该是: ~ 指定偏移量 ,指定截取字符长度 如果两者的数值(偏移量或长度)是负数,使用的数字将会是环境变量的长度加上位移或指定长度。我会修正上面帖子中的描述。这里举个例子来说明: set /p ok=Input value of "ok" environment-variable:_ C:\Documents and Settings\gnaw0725>set /p ok=Input value of "ok" environment-var C:\Documents and Settings\gnaw0725>echo %ok% C:\Documents and Settings\gnaw0725>echo %ok:~4,4% C:\Documents and Settings\gnaw0725>echo %ok:~-4,4% C:\Documents and Settings\gnaw0725>echo %ok:~4,-4% C:\Documents and Settings\gnaw0725>echo %ok:~-4,-4% C:\Documents and Settings\gnaw0725>echo %ok:~,-4% C:\Documents and Settings\gnaw0725>echo %ok:~-4% C:\Documents and Settings\gnaw0725>echo %ok:~4,% SET扩展命令集有些特殊用法,例如: %CD% - 展开为含目前目录的字符串。(gnaw0725注:这个扩展功能较之For中的%~$PATH:I的用法要弱的多了) %RANDOM% - 展开为一个在 0 和 32767 之间的整数随机数值。 %ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值 %CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。 %CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。 这些用法有待以后脚本运用中的实践。SET扩展命令集的帮助信息如下: Microsoft Windows XP [Version 5.1.2600] C:\Documents and Settings\gnaw0725>set /? SET [variable=[string]] variable 指定环境变量名称。 仅键入 SET 而不加上任何参数,可以显示目前的环境变量。 如果您启用了扩充命令,SET 指令有以下的改变: 如果执行 SET 命令而且只包含变量名称,没有等号或数值的话,指令会显示出所有前缀符合 SET 命令中指定变量名称的所有变量 SET P 会列出所有以 'P' 为开头的环境变量。 如果在目前的环境中找不到变量名称,SET 指令会将 ERRORLEVEL设为 1。 SET 指令不将等号 (=) 视为变量名称的一部份。 有两个新参数已经加到 SET 指令中: SET /A expression /A 指定在等号右方的字符串是一个要被运算的数字表达式。您可以用表达式进行简单的运算,而且支持下列的运算符 (依照运算优先级由高到低排列): () - 组成一群 如果您使用了任何逻辑或余数运算符,您必须将表达式两边括上引号。任何在表达式中非数字的字符串会被当作环境变量,并且在使用前会先将这些环境变量转换为数字。如果您所指定的环境变量名称尚未在目前环境中定义,那么它的值会被设为 0。这可以让您用环境变量值来做运算,而不必打入所有的 % 符号来取得它的值。如果 SET /A 是用脚本文件之外的指令行执行,它会显示表达式最后的数值。指定运算符需要有个环境变量在等号的左方。0x 前缀在数字前方代表十六进制数字、0b 前缀代表二进制数或 0 前缀代表八进制数字,否则数字值都是指十进制数。所以 0x12 就和 18、022 等相同。请注意八进制数字可能容易弄错: 像 08 和 09 就不是正确的数字,因为 8 和 9 并不是八进制的正确数字。 /P 参数让您设定指令行的用户输入变量值。在读取输入指令行之前,显示指定的 promptString。promptString 可以是空白。 环境变量取代功能已经有下列增强: %PATH:str1=str2% 会将 PATH 环境变量展开,取代每个发现的 "str1" 与 "str2"的扩充结果。"str2" 可以是空白字符串,这会从扩充输出中删除全部 "str1"。"str1" 可以用星号开始,这将会从扩充输出的开头开始,对应到从所有第一个发现含有str1 的项目。 您也可以为扩充功能指定子字符串。 %PATH:~10,5% 这将会扩充 PATH 环境变量,然后只使用扩充结果的第 11 个(位移 10)字符后的 5 个字符如果长度未指定,将会预设为上次使用的变量值。如果数字(位或长度)是负数,使用的数字将会是环境变量的长度加上位移或指定长度。 %PATH:~-10% 将抽出 PATH 变数的最后 10 个字符。 %PATH:~0,-2% 将抽出 PATH 变数的最后 2 个字符。 最后,系统加入了延迟环境变量展开的支持。在默认状态下,指令展开会启用这项支持,但是您可以在 CMD.EXE 用 /V 指令行参数来启用/停用这个功能。 请参看 CMD /? 延迟环境变量展开功能可用来避开展开功能限制。这项限制是发生在指令行读取过程,不是发生在执行过程。下面的范例说明了立即展开变量时会发生的问题: set VAR=before 这个例子永远无法显示 echo 讯息,因为在两个 IF 叙述中的 %VAR% 会在第一个 IF 叙述被读入时便被展开。这是因为它是逻辑上包含了 IF 的内部,而内部又是一个复合叙述。 所以在复合叙述内的 IF 实际上是用"before" 和 "after" 来比较,而这永远不会为真。同样的,下面的例子也不会作用: set LIST= 这个例子中并不会建立目前目录中所有档案的列表,相反的只会将 LIST 变量设为最后一个找到的档案。同样地,这是因为 %LIST% 只有在 FOR 叙述第一次被读入时才展开,此时 LIST 变数是空的。所以我们实际执行的 FOR循环是: for %i in (*) do set LIST= %i 这只是重复的将 LIST 设为最后找到的档案。 延迟环境变量展开让您可以用一个不同的字符 (惊叹号) 在执行时展开环境变量。如果启用了延迟环境变量展开,上面的例子可以被改写如下而正常作用: set VAR=before set LIST= 如果您启用了扩充指令,有几个动态环境变量会被展开但是不会出现在 SET所显示的环境变量列表中。这些变量的值会每次在这些变量被展开时动态地重新计算如果用户用这些变量的名称来定义变量时,则这个新定义会覆盖以下所列的动态变量: %CD% - 展开为含目前目录的字符串。 %DATE% - 展开为与 DATE 命令格式相同的目前日期字符串。 %TIME% - 展开为与 TIME 命令格式相同的目前时间字符串。 %RANDOM% - 展开为一个在 0 和 32767 之间的整数随机数值。 %ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值 %CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。 %CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。 喜欢这篇文章吗?那就点击 订阅吧
首页|
评论 2 |
引用 0 |
编辑 按下键盘Ctrl+D会有惊喜发生 上一篇日志:<< Full Patch For MSN Messenger 7.0 Final Build 0777
|
没找到?尝试站内搜索吧!
6月最热文章
虚拟化技术 如何减小pagefile系统文件太大小 再谈“%date:~0,10% 的使用”文章评论:
再谈“%date:~0,10% 的使用”文章归档: |
本页精品文章:再谈“%date:~0,10% 的使用”
活动目录SEO博客公告
月流量突破 10 万,总流量突破170万,如果您对活动目录域及网络管理也有心得,并且希望以此扩大自己影响力,只需要添加本站链接,然后将文章标题和链接在线留言给活动目录博客,活动目录博客将收录您的文章,并注明您的站点及链接。