无忧启动论坛

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

setlocal

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-9 19:28:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. @Echo Off
  2. PUSHD %~dp0
  3. COLOR 0B
  4. Set Prog=小马WinPE专用安装程序
  5. Set L1=      ╭══════════════════╮
  6. Set L2=      ║                  ║
  7. Set L3=   ╭══┤      小马WinPE专用安装程序        ├══╮
  8. Set L4=   ║  ║                  ║  ║
  9. Set L5=   ║  ╰══════════════════╯  ║
  10. Set L6=   ║                        ║
  11. Set L7=   ╟════════════════════════╢
  12. Set L8=   ║ 版权所有:深度技术论坛            盗版不究  ║
  13. Set L9=   ╰────────────────────────╯
  14. Title %Prog%
  15. Set PEFile=WINPE.IM_
  16. Set PEIni=MINIPE\WINPE.INI
  17. Set LogFile=PEInstall.log
  18. Set AddATTR=ATTRIB +S +H
  19. Set DelATTR=ATTRIB -S -H -R
复制代码


set 设置环境变量的前面是否应该加一个setlocal
忘了是在哪里看到的了,自己也不懂
2#
发表于 2009-9-9 19:52:16 | 只看该作者
加不加setlocal要看你意欲何为:如果你想让某个变量在程序运行的整个周期中都起作用的话,就不要用setlocal;如果你想限定某个变量只在某段过程中起作用,那就先setlocal,然后再在适当的地方用endlocal结束作用范围。说白了,setlocal使用与否,决定了某个变量是全局变量还是局部变量。
回复

使用道具 举报

3#
 楼主| 发表于 2009-9-9 21:52:09 | 只看该作者
set设置的变量,批处理运行完毕后就不起作用了吧。
回复

使用道具 举报

4#
发表于 2009-9-9 23:03:56 | 只看该作者
是的,批处理运行完毕之后,所设置的所有变量都会消失。
回复

使用道具 举报

5#
 楼主| 发表于 2009-9-10 00:39:14 | 只看该作者
好的,谢谢!得到帮助不忘说谢谢
回复

使用道具 举报

6#
 楼主| 发表于 2009-9-12 19:49:05 | 只看该作者
Set Choice=
Set /P Choice=   请选择要进行的操作 (B/Q) ,然后按回车:
If "%Choice%"=="" Goto NoUD
If Not "%Choice%"=="" Set Choice=%Choice:~0,1%
If /I "%Choice%"=="B" Goto Start
If /I "%Choice%"=="Q" Exit
Goto NoUD
Exit

批处理运行完毕之后,所设置的所有变量都会消失。


那这样再批处理中还有必要先设置一下set choice=  再用吗?
回复

使用道具 举报

7#
发表于 2009-9-13 16:32:48 | 只看该作者
在使用变量之前,先把即将使用到的变量清空,防止多次调用时使用上一次的变量值。如果你确定将要使用的变量不会有任何初始值,而是一个空值,那就不用先清空再赋值。
回复

使用道具 举报

8#
 楼主| 发表于 2009-9-14 11:41:45 | 只看该作者
好的,知道了。谢谢了!
回复

使用道具 举报

9#
发表于 2011-10-1 21:42:32 | 只看该作者
原帖由 namejm 于 2009-9-9 19:52 发表
加不加setlocal要看你意欲何为:如果你想让某个变量在程序运行的整个周期中都起作用的话,就不要用setlocal;如果你想限定某个变量只在某段过程中起作用,那就先setlocal,然后再在适当的地方用endlocal结束作用 ...

呵呵,谢谢。终于找到这个命令在解释了。
回复

使用道具 举报

10#
发表于 2011-10-2 07:21:23 | 只看该作者
cmd 下运行 setlocal /?
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

SETLOCAL

如果命令扩展名被启用,SETLOCAL 会如下改变:

SETLOCAL 批命令现在可以接受可选参数:
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            启动或停用命令处理器扩展名。详细信息,请参阅 CMD /?。
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
            启动或停用延缓环境变量扩展名。详细信息,请
            参阅 SET /? 。
无论在 SETLOCAL 命令之前它们的设置是什么,这些修改会一直
保留到匹配的 ENDLOCAL 命令。

如果有一个参数,SETLOCAL 命令将设置 ERRORLEVEL 的值。
如果有两个有效参数中的一个,该值则为零。用下列技巧,您
可以在批脚本中使用这个来决定扩展名是否可用:

    VERIFY OTHER 2>nul
    SETLOCAL ENABLEEXTENSIONS
    IF ERRORLEVEL 1 echo Unable to enable extensions

这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL
不设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将
ERRORLEVEL 值初始化成非零值。
回复

使用道具 举报

11#
发表于 2011-10-6 13:00:31 | 只看该作者
原帖由 <i>freesoft00</i> 于 2009-9-12 19:49 发表 那这样再批处理中还有必要先设置一下set choice=  再用吗?



  你只看到了表像,  这是个多分枝处理, 如果你前面先择了某项, 而由于后面的返回重新选择什么的,这个变量有可能会由于代码的不严谨,而出错.
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 12:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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