![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-25 22:39 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 用什么办法可以使BAT结束,而变量值还在,还可以用呢? |
| 可打印版本 3,586 / 10 |
| 第1楼 024024 | 发表于 2006-03-23 17:35 |
| 初级用户 发帖 14 积分 60 | |
|
用什么办法可以使BAT结束,而变量值还在,还可以用呢? 我在BAT文件中用SET设置了一些变量,可是BAT一结束,这些变量值也跟着消失了.
用什么办法可以使BAT结束,而变量值还在,还可以用呢? |
|
| 第2楼 Climbing | 发表于 2006-03-23 18:17 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
在批处理中使用Jscript或者VBscript来设置变量。如:
//test.js var shell shell = WScript.CreateObject("WScript.Shell") shell.Environment("System").Item("DEVMGR_SHOW_NONPRESENT_DEVICES")='1' |
|
| 第3楼 DOSforever | 发表于 2006-03-23 18:34 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
如果你在批处理中没有特意的把所设的环境变量取消,本来它就一直存在的,没有必要动这个脑筋。除非你重新启动机器。
|
|
| 第4楼 Climbing | 发表于 2006-03-23 18:40 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
楼上说得是不对的,在批处理中设置的环境变量只在一个cmd进程中有效,如果cmd进程关掉了,变量也就消失了。楼主肯定是直接双击执行批处理,执行完成后,相应的cmd进程就直接关掉了。就算不关掉,批处理设置的环境变量也只是在它运行的那个cmd环境中有效,而不是全局生效。不信试一下!
先打开一个cmd窗口,设置一个环境变量,再打开另一个cmd窗口,检查是否有相应的环境变量。 |
|
| 第5楼 DOSforever | 发表于 2006-03-23 18:57 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
CMD?!
对不起,我只考虑纯 DOS 环境。 顺便和各位说一下我一直以来的看法:现在我们这个 DOS 论坛越来越不纯了,许多问题其实都是 Windows 下的,却发到什么“DOS问题解答室”来了,这样的例子可以举出许多,后面随便翻几页都有。如果我是版主的话,早就转了。当然,还有些问题属于比较低层的,和操作系统的关系不大,但论坛又没有专门开设一个这样的版面,可能是考虑到“疑难解答室”的人比较多,所以就发到这里来了吧。呵呵 另外,小嗑好长时间没见到你了,来,让我亲一个 呵呵呵呵…… |
|
| 第6楼 Climbing | 发表于 2006-03-23 20:24 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
也不能这么绝对,虽然cmd不同于dos,便我们的目的是利用计算机更好的为我们服务,何必过于执着呢?毕竟现在没有几个人拿纯dos工作,cmd环境下的应用要远远多于纯dos下的应用,何况,在批处理级别,二者也没有本质上的差别。
|
|
| 第7楼 willsort | 发表于 2006-03-23 21:53 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
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。 |
|
| 第8楼 linson | 发表于 2006-03-23 22:06 |
| 中级用户 发帖 31 积分 283 | |
Originally posted by Climbing at 2006-3-23 08:24 PM: 同意这种说法! |
|
| 第9楼 DOSforever | 发表于 2006-03-23 22:16 |
| 金牌会员 发帖 2,239 积分 4,639 | |
Originally posted by Climbing at 2006-3-23 20:24: 我说的不是指这个帖子,只是想到了就正好说几句,你去看看后面的几个帖子就知道了,有些问题连和命令行都无关。许多人都把 Windows 下的概念用到 DOS 上去了。 |
|
| 第10楼 3742668 | 发表于 2006-03-23 22:45 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
最简单的方法:
在批处理的最后把你要保存的变量的赋值语句写到一个批处理文件,然后修改你的注册表使每次启动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楼 bagpipe | 发表于 2006-03-24 10:20 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
站内的DOS是有些不纯了,不过什么事情都是在变化,不能总停留在一个地方,我们希望的只是发挥我们最大的能力去支持和使用这个永远不过的系统---DOS
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |