无忧启动论坛

标题: 请高手看看批处理错在哪里 [打印本页]

作者: willsion    时间: 2007-3-16 09:32
标题: 请高手看看批处理错在哪里
@echo off
setlocal ENABLEDELAYEDEXPANSION

set asus=_ASUS_
set lenovo=_LENOVO_
set sony=_SONY_

set OEM=asus

for %%i in (asus lenovo sony) do (
    set OEM=%%i
    echo The OEM value is !%OEM%!
    rem 以下对 !%OEM%! 进行处理
    )

pause

exit

这个批处理本意是通过引用OEM变量得到asus、lenovo和sony的值,然后进行处理。

但for循环内OEM的值没有发生改变,还是原来的初始值"asus",
输出结果是三行的 The OEM value is _ASUS_

不是预期的The OEM value is _ASUS_
               The OEM value is _LENOVO_
               The OEM value is _SONY_

请各位高手指点一下。

谢谢。
作者: lxl1638    时间: 2007-3-16 13:19
原帖由 willsion 于 2007-3-16 09:32 AM 发表
@echo off
setlocal ENABLEDELAYEDEXPANSION

set asus=_ASUS_
set lenovo=_LENOVO_
set sony=_SONY_

set OEM=asus

for %%i in (asus lenovo sony) do (
    set OEM=%%i
    echo The OEM value  ...



名与值!
asus、lenovo、sony是环境变量的名,要引用它们的值应该用%asus%、%lenovo%、%sony%。
如要设置OEM的值为_ASUS_,命令是 SET OEM=%asus% ,而不是set OEM=asus。
SET OEM=%asus% 的结果是OEM为_ASUS_
SET OEM=asus 的结果是OEM为asus
作者: willsion    时间: 2007-3-16 16:06
原帖由 lxl1638 于 2007-3-16 01:19 PM 发表



名与值!
asus、lenovo、sony是环境变量的名,要引用它们的值应该用%asus%、%lenovo%、%sony%。
如要设置OEM的值为_ASUS_,命令是 SET OEM=%asus% ,而不是set OEM=asus。
SET OEM=%asus% 的结果是OEM ...

老九可能误解我的意思了。

我的用意是:
首先,把asus、lenovo、sony变量的名称赋值给oem
其次,通过对oem的操作(!%OEM%!)得到asus、lenovo、sony三个变量的值_ASUS_,_LENOVO_,_SONY_。
作者: willsion    时间: 2007-3-16 17:17
最终解决方法:
C:\Documents and Settings\J\桌面>type a.bat&echo =======================&a
@echo off
setlocal ENABLEDELAYEDEXPANSION

set asus=_ASUS_
set lenovo=_LENOVO_
set sony=_SONY_

set OEM=asus

for %%i in (asus lenovo sony) do (
    set OEM=%%i
    call echo The OEM value is %%!OEM!%%
    rem 以下对 !%OEM%! 进行处理
    )

pause

exit
=======================
The OEM value is _ASUS_
The OEM value is _LENOVO_
The OEM value is _SONY_
请按任意键继续. . .


引用%%!OEM!%%值还是需要用set
call set value=%%!OEM!%%
echo The value is !value!

以上是dos联盟NaturalJ0提供的解决方法。非常感谢他。
作者: namejm    时间: 2007-3-16 20:56
  既然已经启用了变量延迟,那么, call %%!OEM!%% 的格式就显得有点多余了,要么就不要 call 并且只用 !OEM!,要么就不要启用变量延迟语句而直接用 call %%OEM%%。
作者: bianlimit    时间: 2007-3-28 22:01
学习了!谢谢!支持一下!
作者: PPP1314    时间: 2007-4-10 00:07
晕,想学,不过有D深度,....




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3