无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3814|回复: 6
打印 上一主题 下一主题

请高手看看批处理错在哪里

[复制链接]
跳转到指定楼层
1#
发表于 2007-3-16 09:32:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@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_

请各位高手指点一下。

谢谢。
2#
发表于 2007-3-16 13:19:55 | 只看该作者
原帖由 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
回复

使用道具 举报

3#
 楼主| 发表于 2007-3-16 16:06:17 | 只看该作者
原帖由 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_。
回复

使用道具 举报

4#
 楼主| 发表于 2007-3-16 17:17:12 | 只看该作者
最终解决方法:
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提供的解决方法。非常感谢他。
回复

使用道具 举报

5#
发表于 2007-3-16 20:56:55 | 只看该作者
  既然已经启用了变量延迟,那么, call %%!OEM!%% 的格式就显得有点多余了,要么就不要 call 并且只用 !OEM!,要么就不要启用变量延迟语句而直接用 call %%OEM%%。
回复

使用道具 举报

6#
发表于 2007-3-28 22:01:24 | 只看该作者
学习了!谢谢!支持一下!
回复

使用道具 举报

7#
发表于 2007-4-10 00:07:33 | 只看该作者
晕,想学,不过有D深度,....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-27 17:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表