批处理 变量变量问题

> 批处理的变量调用问题@EchooffREM酷泥巴制作modecon:cols=30lines=8C
批处理的变量调用问题@EchooffREM酷泥巴制作modecon:cols=30lines=8C
xiaoxiangqiao & &
发布时间: & &
浏览:54 & &
回复:4 & &
悬赏:0.0希赛币
批处理的变量调用问题@Echo offREM 酷泥巴制作mode con: cols=30 lines=8Color 0ATitle 下载DirectX9.0c
by酷泥巴CD DX9.0cclsecho 正在检测当前系统环境…IF EXIST C:\WINDOWS\system32\D3DX9_39.dll (ECHO DirectX9.0c已经安装pause& Exit) ELSE (set Link=thunder://QUFodHRwOi8vcGF0Y2g3LmFsaTIxMy5uZXQvbmV3cGF0Y2gyNi9kaXJlY3R4OTA5MDgucmFyWlo=cd.&tmp.vbsfor /f &usebackq skip=21 tokens=*& %%a in (%0) do @echo %%a$>$tmp.vbstmp.vbs&del tmp.vbs /qgoto :eofExit)Rem 以下为VbScript脚本set ThunderAgent = CreateObject(&ThunderAgent.Agent.1&)Call ThunderAgent.AddTask(&%Link%&,&还是俺的blog&,&c:\a\b\c\&,&&,&&,1,0,5)& mitTasks()===========================================这是一个调用迅雷下载文件的批处理。但是运行后,迅雷的地址栏显示为%Link%,不知道该如何改正?
也许Call ThunderAgent.AddTask(%Link%,&还是俺的blog&,&c:\a\b\c\&,&&,&&,1,0,5)
li1234 & &
& & (0)(0)VBS里面不能直接用%LINK%去引用环境变量,应该这样:Set shell = CreateObject( &WScript.Shell& )link=shell.ExpandEnvironmentStrings(&%LINK%&)
& & (0)(0)原来要这样,比较简单:@Echo offREM 酷泥巴制作mode con: cols=30 lines=8Color 0ATitle 下载DirectX9.0c
by酷泥巴CD DX9.0cclsecho 正在检测当前系统环境…IF EXIST C:\WINDOWS\system32\D3DX9_39.dll (ECHO DirectX9.0c已经安装pauseExit) ELSE (set Link=thunder://QUFodHRwOi8vcGF0Y2g3LmFsaTIxMy5uZXQvbmV3cGF0Y2gyNi9kaXJlY3R4OTA5MDgucmFyWlo=cd.&tmp.vbsfor /f &usebackq skip=23 tokens=1,* delims=_& %%a in (%0) do (if &%%b& neq && (@echo %%a%link%%%b$>$tmp.vbs) else @echo %%a$>$tmp.vbs)tmp.vbs&del tmp.vbs /qgoto :eofExit)Rem 以下为VbScript脚本set ThunderAgent = CreateObject(&ThunderAgent.Agent.1&)Call ThunderAgent.AddTask(&_&,&还是俺的blog&,&c:\a\b\c\&,&&,&&,1,0,5)mitTasks()&
& & (0)(0)探讨引用:VBS里面不能直接用%LINK%去引用环境变量,应该这样:Set shell = CreateObject( &WScript.Shell& )link=shell.ExpandEnvironmentStrings(&%LINK%&) 不是VBS的问题,是批处理的问题。 @echo可以使用%LINK%写出变量的值的 但是那个“For /f”中的tokens参数却不支持%%运算符 不知道怎么办了,郁闷~~~li12344 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-批处理中获取环境变量的问题
[问题点数:20分,结帖人NoExcuse]
批处理中获取环境变量的问题
[问题点数:20分,结帖人NoExcuse]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2009年9月 其他开发语言大版内专家分月排行榜第三2009年2月 其他开发语言大版内专家分月排行榜第三2008年12月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。BAT&批处理&setlocal&与&变量延迟
setlocal 与 变量延迟
本条内容引用[英雄出品]的批处理教程:
要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。
为了更好的说明问题,我们先引入一个例子。
set a=5 & echo %a%
解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“set
a=5 & echo
%a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。)
而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。
那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:
setlocal enabledelayedexpansion
set a=5 & echo !a!
解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal
enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set
a=4”先给变量a赋值为
4,“set a=5 & echo
!a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
再举一个例子巩固一下。
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什
么结果呢?结果是这样的:
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
即没有感知到for语句中的动态变化。
提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,看例子。
例:交换两个变量的值,且不用中间变量
::目的:交换两个变量的值,但是不使用临时变量
::Code by JM
[email=CMD@XP]CMD@XP[/email]
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
已投稿到:批处理关于截取变量中字符串(字段)问题的详细说明 - 其他综合 - 红黑联盟
批处理关于截取变量中字符串(字段)问题的详细说明
为了说明截取变量中字符串的问题曾经举过如下这个例子:
echo 第一个字符为:%str:~0,1%
echo 头两个字符为:%str:~0,2%
echo 头5个字符为:%str:~0,5%
echo 去掉最后一个字符后的字符串为:%str:~0,-1%
echo 去掉最后3个字符后的字符串为:%str:~0,-3%
echo 第4个字符为:%str:~3,1%
echo 第4个及其之后的3个字符为:%str:~3,4%
echo 最后一个字符为:%str:~-1%
echo 最后一个字符为:%str:~-1,1%
echo 最后一个字符为:%str:~-1,2%
echo 倒数第4个字符为:%str:~-4,1%
echo 倒数第4个及其之后的字符为:%str:~-4%
echo 倒数第4个及其之后的1个字符为:%str:~-4,2%
echo 倒数第4个及其之后的2个字符为:%str:~-4,3%
为了说明这个问题,我在这里把批处理取字符,做下进一步的解释,希望对新手有所启发
echo %var:~n,k%
我们在这里对每个参数做个说明:&%var&,即我们要从中要截取字符的字符串.& ~ &取字
符标志符(我是这么理解的),&n& 我们将其理解为指针,&k&我们将其理解为偏移地址.(注
:指针和偏移地址都是从零开始数的)
我们还是用namejm版主的例子做下说明:
rem 定义一个str字符串为
echo 第一个字符为:%str:~0,1%
rem 指针为0,偏移地址为1,即从第0位开始,取1位
echo 头两个字符为:%str:~0,2%
rem 指针为0,偏移地址为2,即从第0位开始,取2位
echo 头5个字符为:%str:~0,5%
rem&& 指针为0,偏移地址为5,即从第0位开始,取5位
echo 去掉最后一个字符后的字符串为:%str:~0,-1%
rem 当&k&为负值时,我们可以这样理解:从指针开始处开始取其后面所有字符,然后减去
后面&abs(k)位&..所以这个句字我们可以做如下解释:从第0位开始取其全部字符
为:然后从后面减去abs(k)位,所以最后结果为:
echo 去掉最后3个字符后的字符串为:%str:~0,-3%
rem&& 该句解释同上&
echo 最后一个字符为:%str:~-1%
rem&& 参数&n,&和&k&都可以为缺省,缺省&n,&时可以理解为:从abs(k)位开始取其全部
echo 倒数第4个及其之后的字符为:%str:~-4%
rem 解释同上&
echo 最后一个字符为:%str:~-1,1%
rem&& n为负值时,表示从后面开始截取字符,取k位(此时n应从1开始数)
echo 最后一个字符为:%str:~-1,2%
rem&& 解释同上&
echo 倒数第4个字符为:%str:~-4,1%
rem&& 解释同上&
echo 倒数第4个及其之后的1个字符为:%str:~-4,2%
rem&& 解释同上&
echo 倒数第4个及其之后的2个字符为:%str:~-4,3%
rem 解释同上&怎么用BAT批处理 进行算术运算 得到一个用变量表示的数值,而使用它?
[问题点数:20分,结帖人dianyancao]
怎么用BAT批处理 进行算术运算 得到一个用变量表示的数值,而使用它?
[问题点数:20分,结帖人dianyancao]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年6月 Linux/Unix社区大版内专家分月排行榜第二2014年1月 Linux/Unix社区大版内专家分月排行榜第二2013年11月 Linux/Unix社区大版内专家分月排行榜第二2010年6月 Windows专区大版内专家分月排行榜第二2010年4月 Windows专区大版内专家分月排行榜第二2010年3月 Windows专区大版内专家分月排行榜第二2009年12月 Windows专区大版内专家分月排行榜第二2009年11月 Windows专区大版内专家分月排行榜第二2008年7月 Windows专区大版内专家分月排行榜第二2008年1月 Windows专区大版内专家分月排行榜第二2007年12月 Windows专区大版内专家分月排行榜第二2007年11月 Windows专区大版内专家分月排行榜第二2007年10月 Windows专区大版内专家分月排行榜第二2007年6月 Windows专区大版内专家分月排行榜第二
2014年7月 Linux/Unix社区大版内专家分月排行榜第三2014年4月 Linux/Unix社区大版内专家分月排行榜第三2013年1月 Linux/Unix社区大版内专家分月排行榜第三2010年5月 Windows专区大版内专家分月排行榜第三2009年9月 Windows专区大版内专家分月排行榜第三2009年8月 Windows专区大版内专家分月排行榜第三2008年8月 Windows专区大版内专家分月排行榜第三2008年6月 Windows专区大版内专家分月排行榜第三2007年9月 Windows专区大版内专家分月排行榜第三2007年7月 Windows专区大版内专家分月排行榜第三2007年4月 Windows专区大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 批处理设置环境变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信