中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用什么办法可以使BAT结束,而变量值还在,还可以用呢?
楼 主 用什么办法可以使BAT结束,而变量值还在,还可以用呢? 发表于 2006-03-23 17:35 ·  中国 广东 深圳 宝安区 电信
初级用户
积分 60
发帖 14
注册 2006-03-23 09:28
UID 52635
状态 离线
我在BAT文件中用SET设置了一些变量,可是BAT一结束,这些变量值也跟着消失了.
用什么办法可以使BAT结束,而变量值还在,还可以用呢?
2 发表于 2006-03-23 18:17 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
在批处理中使用Jscript或者VBscript来设置变量。如:

//test.js
var shell
shell = WScript.CreateObject("WScript.Shell")
shell.Environment("System").Item("DEVMGR_SHOW_NONPRESENT_DEVICES")='1'
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2006-03-23 18:34 ·  中国 上海 黄浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
UID 35785
性别 男
状态 离线
如果你在批处理中没有特意的把所设的环境变量取消,本来它就一直存在的,没有必要动这个脑筋。除非你重新启动机器。
4 发表于 2006-03-23 18:40 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
楼上说得是不对的,在批处理中设置的环境变量只在一个cmd进程中有效,如果cmd进程关掉了,变量也就消失了。楼主肯定是直接双击执行批处理,执行完成后,相应的cmd进程就直接关掉了。就算不关掉,批处理设置的环境变量也只是在它运行的那个cmd环境中有效,而不是全局生效。不信试一下!

先打开一个cmd窗口,设置一个环境变量,再打开另一个cmd窗口,检查是否有相应的环境变量。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
5 发表于 2006-03-23 18:57 ·  中国 上海 黄浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
UID 35785
性别 男
状态 离线
CMD?!
对不起,我只考虑纯 DOS 环境。

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

另外,小嗑好长时间没见到你了,来,让我亲一个呵呵呵呵……
6 发表于 2006-03-23 20:24 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的应用要远远多于纯dos下的应用,何况,在批处理级别,二者也没有本质上的差别。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
7 发表于 2006-03-23 21:53 ·  中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
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:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
8 发表于 2006-03-23 22:06 ·  中国 福建 厦门 电信
中级用户
积分 283
发帖 31
注册 2004-03-06 00:00
UID 19334
性别 男
状态 离线
Originally posted by Climbing at 2006-3-23 08:24 PM:
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的庠...

同意这种说法!
9 发表于 2006-03-23 22:16 ·  中国 上海 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
UID 35785
性别 男
状态 离线
Originally posted by Climbing at 2006-3-23 20:24:
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的庠...

我说的不是指这个帖子,只是想到了就正好说几句,你去看看后面的几个帖子就知道了,有些问题连和命令行都无关。许多人都把 Windows 下的概念用到 DOS 上去了。
10 发表于 2006-03-23 22:45 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
最简单的方法:
在批处理的最后把你要保存的变量的赋值语句写到一个批处理文件,然后修改你的注册表使每次启动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
以后只要通过这个快捷方式来执行运行批处理就可以保证变量的值了
11 发表于 2006-03-24 10:20 ·  中国 北京 顺义区 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
站内的DOS是有些不纯了,不过什么事情都是在变化,不能总停留在一个地方,我们希望的只是发挥我们最大的能力去支持和使用这个永远不过的系统---DOS
论坛跳转: