中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用什么办法可以使BAT结束,而变量值还在,还可以用呢?
作者:
标题: 用什么办法可以使BAT结束,而变量值还在,还可以用呢? 上一主题 | 下一主题
024024
初级用户





积分 60
发帖 14
注册 2006-3-23
状态 离线
『楼 主』:  用什么办法可以使BAT结束,而变量值还在,还可以用呢?

我在BAT文件中用SET设置了一些变量,可是BAT一结束,这些变量值也跟着消失了.
用什么办法可以使BAT结束,而变量值还在,还可以用呢?

2006-3-23 17:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

在批处理中使用Jscript或者VBscript来设置变量。如:

//test.js
var shell
shell = WScript.CreateObject("WScript.Shell")
shell.Environment("System").Item("DEVMGR_SHOW_NONPRESENT_DEVICES")='1'



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-3-23 18:17
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 3 楼』:  

如果你在批处理中没有特意的把所设的环境变量取消,本来它就一直存在的,没有必要动这个脑筋。除非你重新启动机器。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-3-23 18:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

楼上说得是不对的,在批处理中设置的环境变量只在一个cmd进程中有效,如果cmd进程关掉了,变量也就消失了。楼主肯定是直接双击执行批处理,执行完成后,相应的cmd进程就直接关掉了。就算不关掉,批处理设置的环境变量也只是在它运行的那个cmd环境中有效,而不是全局生效。不信试一下!

先打开一个cmd窗口,设置一个环境变量,再打开另一个cmd窗口,检查是否有相应的环境变量。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-3-23 18:40
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 5 楼』:  

CMD?!
对不起,我只考虑纯 DOS 环境。

顺便和各位说一下我一直以来的看法:现在我们这个 DOS 论坛越来越不纯了,许多问题其实都是 Windows 下的,却发到什么“DOS问题解答室”来了,这样的例子可以举出许多,后面随便翻几页都有。如果我是版主的话,早就转了。当然,还有些问题属于比较低层的,和操作系统的关系不大,但论坛又没有专门开设一个这样的版面,可能是考虑到“疑难解答室”的人比较多,所以就发到这里来了吧。呵呵

另外,小嗑好长时间没见到你了,来,让我亲一个呵呵呵呵……



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-3-23 18:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 6 楼』:  

也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的应用要远远多于纯dos下的应用,何况,在批处理级别,二者也没有本质上的差别。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-3-23 20:24
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re 024024l:

      环境变量的修改在程序结束后失效的情况主要有以下几类:

      1、在DOS/9x/NTs的COMMAND下,在批处理中使用%comspec%调用了另外的程序和子程序,并在其中修改变量,在结束%comspec%调用后这个修改将失效;

      解决:在结束%comspec%调用前将其中的环境变量保存到临时批处理文件中,在结束后再运行这个批处理重新设定变量。

      实例:
      %comspec% /c %0 : subroutin
      %temp%\_setlocal.bat
      goto end

      :subroutin
      set local=var1
      echo set local=%local% > %temp%\_setlocal.bat
      goto end

      :end

      2、在NTs的CMD下,在批处理中使用了setlocal这个环境变量本地化命令,自此以后,直到遇到endlocal或者批处理结束,其间所有环境变量的修改将于其后失效;

      解决:在批处理结束前,使用enlocal命令,并与环境变量设置语句合并运行;

      实例:
      setlocal
      set local=var1
      enlocal & set local=%local%

      3、在Win下的COMMND/CMD中,环境变量的修改通常只在当前的命令行环境中有效,它不会影响系统全局,或者以后所有的命令行环境;

      解决:使用Windows98安装盘上的增强工具 setx 设备变量。

      实例:
      setx local=var1

Re Climbing:

      MSDOS6.22 / MSDOS7.10/ COMAND@Win9x / COMMAND@WinXP / CMD@WinXP 这些环境的区别与联系异常复杂,他们对批处理的影响也难以估量。它直接导致我在编写完批处理后,必须反复验证它在各种环境下的兼容性,未经测试的环境决不会轻易署在它的可运行环境中,即使同为COMMAND或者CMD。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-3-23 21:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
linson
中级用户




积分 283
发帖 31
注册 2004-3-6
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by Climbing at 2006-3-23 08:24 PM:
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的庠...

同意这种说法!

2006-3-23 22:06
查看资料  发送邮件  发短消息 网志  OICQ (149525162)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by Climbing at 2006-3-23 20:24:
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的庠...

我说的不是指这个帖子,只是想到了就正好说几句,你去看看后面的几个帖子就知道了,有些问题连和命令行都无关。许多人都把 Windows 下的概念用到 DOS 上去了。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-3-23 22:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 10 楼』:  

最简单的方法:
在批处理的最后把你要保存的变量的赋值语句写到一个批处理文件,然后修改你的注册表使每次启动CMD的时候先执行那个批处理。如在你的批处理最后加上一句:
set myvar=%var% >> c:\mybat.bat
然后修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下的AutoRun值为c:\mybat.bat
这样你运行批处理或CMD的时候就会自动执行mybat.bat。
如果你不想修改注册表的话也可以在桌面点右键创建快捷方式,命令行中就输入:
cmd /k c:\mybat.bat
以后只要通过这个快捷方式来执行运行批处理就可以保证变量的值了

2006-3-23 22:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 11 楼』:  

站内的DOS是有些不纯了,不过什么事情都是在变化,不能总停留在一个地方,我们希望的只是发挥我们最大的能力去支持和使用这个永远不过的系统---DOS

2006-3-24 10:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: