Board logo

标题: 编一个程序:从键盘获取字符赋值给DOS环境变量的问题 [打印本页]

作者: 无忌孤飞     时间: 2004-6-13 00:00    标题: 编一个程序:从键盘获取字符赋值给DOS环境变量的问题

我想写一个程序想从键盘上获取字符,然后赋值给环境变量.我做了好久了,用也写了个程序,就是实现不了,各位高手帮办忙呀~
我之前的程序如下:
QB的:
input a$
g$="set path="+a$
shell g
运行后PATH没有任何变化.
作者: willsort     时间: 2004-6-20 00:00
Re 无忌孤飞:

  我并不太熟悉QB,不过猜想你的问题,应该出在SEHLL语句上。SHELL语句利用当前的DOS解释器重新加载一层命令外壳,它与原来的命令环境属于母子关系。如果其后跟随命令串,则执行完命令后会卸载这个子外壳,而你的SET PATH命令串也只能在子外壳中有效,在其卸载退出后会自然失效。所以它不能改变母外壳的环境变量。

  所以,在高级语言中想全局性的改变环境变量,直接利用类SHELL语句是无效的,而是应该利用类似PEEK,POKE的直接读写内存的语句,而且还需要利用程序PSP计算出全局环境的内存位置。

  当然,如果不用高级语言来实现,还是有许多取巧的方法的。本站版主 Roy 便提供了一种用批处理实现的办法。http://dos.e-stone.cn/dosbbs/dispbbs.asp?BoardID=12&ID=8905&replyID=54243&skin=1
  另外,许多第三方提供的增强工具也可以轻松实现类似的功能。
作者: honhaizh     时间: 2006-5-28 10:45
哎,一个环境变量就这么麻烦啊!
作者: asbai     时间: 2006-5-28 14:09
willsort兄正解,任何OS中都是很忌讳直接修改父进程环境的。这是最起码的安全保证。

DOS下还可以直接访问PCB,其它OS中这种保护更为严厉了
作者: jawbin     时间: 2006-5-28 15:01
好象 win32 不共享 DOS VM 了. 但是设置同一个 DOS VM 内的环境变量是没有问题的. 如果是真实 DOS 的话, 你这样可能有用.