找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4918|回复: 6

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

[复制链接]
发表于 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_

请各位高手指点一下。

谢谢。
发表于 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
回复

使用道具 举报

 楼主| 发表于 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_。
回复

使用道具 举报

 楼主| 发表于 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提供的解决方法。非常感谢他。
回复

使用道具 举报

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

使用道具 举报

发表于 2007-3-28 22:01:24 | 显示全部楼层
学习了!谢谢!支持一下!
回复

使用道具 举报

发表于 2007-4-10 00:07:33 | 显示全部楼层
晕,想学,不过有D深度,....
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-1 11:19

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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