中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-01 18:47
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 编一个程序:从键盘获取字符赋值给DOS环境变量的问题 查看 1,413 回复 4
楼 主 编一个程序:从键盘获取字符赋值给DOS环境变量的问题 发表于 2004-06-13 00:00 ·  中国 广东 韶关 电信
初级用户
积分 126
发帖 6
注册 2004-06-11 00:00
22年会员
UID 26518
性别 男
状态 离线
我想写一个程序想从键盘上获取字符,然后赋值给环境变量.我做了好久了,用也写了个程序,就是实现不了,各位高手帮办忙呀~
我之前的程序如下:
QB的:
input a$
g$="set path="+a$
shell g
运行后PATH没有任何变化.
2 发表于 2004-06-20 00:00 ·  中国 山西 运城 联通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
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
  另外,许多第三方提供的增强工具也可以轻松实现类似的功能。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2006-05-28 10:45 ·  中国 上海 闵行区 电信
初级用户
积分 35
发帖 18
注册 2006-04-26 13:31
20年会员
UID 54481
状态 离线
哎,一个环境变量就这么麻烦啊!
4 发表于 2006-05-28 14:09 ·  中国 上海 普陀区 电信
高级用户
★★
积分 653
发帖 252
注册 2006-04-16 19:48
20年会员
UID 53939
状态 离线
willsort兄正解,任何OS中都是很忌讳直接修改父进程环境的。这是最起码的安全保证。

DOS下还可以直接访问PCB,其它OS中这种保护更为严厉了
5 发表于 2006-05-28 15:01 ·  中国 湖北 荆州 电信
高级用户
★★★
积分 994
发帖 444
注册 2005-01-29 00:00
21年会员
UID 35779
性别 男
状态 离线
好象 win32 不共享 DOS VM 了. 但是设置同一个 DOS VM 内的环境变量是没有问题的. 如果是真实 DOS 的话, 你这样可能有用.
论坛跳转: