中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何判断批文件的运行环境是纯dos还是窗口模式?
作者:
标题: 如何判断批文件的运行环境是纯dos还是窗口模式? 上一主题 | 下一主题
lizaoyou
中级用户




积分 210
发帖 85
注册 2007-1-14
来自 广东广州
状态 离线
『楼 主』:  如何判断批文件的运行环境是纯dos还是窗口模式?

如题:拟指定一批文件只能在纯dos下运行,若在窗口模式下执行则返回出错信息,有何好办法?请指教。

2007-2-3 13:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

在 MS-DOS 中没有预定义的很多环境变量,只有几个简单的环境变量:)
在 Windows CMD 中预定义的环境变量有很多:)

最简单的方法就是找一个它们在环境变量之中的差异:)

在 Windows CMD 中有环境变量:SystemRoot=C:\WINDOWS
在 MS-DOS 中系统没有预定义这个:SystemRoot 变量

所以上面方法只是一个省事儿的方法,但此单一判断并不能保证就一定是 MS-DOS 环境,因为万一被计算机使用者预先设定过一个名为 %SystemRoot% 的变量就会误判断:)

比较有效的还有 VAR 判断版本命令……和很多……
@echo off

if NOT [%SystemRoot%]==[] goto :END

        ::  这之间是 MS-DOS 环境下可以使用的命令段,Windows CMD 环境下不会执行
        echo MS-DOS



:END

        ::  在 MS-DOS 与 Windows CMD 下都可以执行
如果不放心还可以再多比较一个存有差异的环境变量,不过这只是省事的方法,并不是严谨的判断方法。



在 MS-DOS 环境下,SET 不支持 += 等……运算,所以,如果设类似 A=2 ,则 A+=1(相当于计算 A=A+1 ),但在 MS-DOS 环境中绝对不会计算出结果为3,所以也就判断出了当前环境是 MS-DOS 环境。
...
...


set a=2
set /a a+=1
if [%a%]==[3] goto :END

...
...
以上是大概判断原理,如果是运行在窗口模式下,兄可以自行加入相关提示错误信息:)

[ Last edited by redtek on 2007-2-3 at 11:47 AM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 lizaoyou 分数: +2  时间:2007-2-3 23:49




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-2-3 22:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anqing
高级用户




积分 859
发帖 413
注册 2006-8-14
状态 离线
『第 3 楼』:  

基础知识学习了

2007-2-3 23:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lizaoyou
中级用户




积分 210
发帖 85
注册 2007-1-14
来自 广东广州
状态 离线
『第 4 楼』:  

多谢redtek兄的详细解答。

我原使用环境变量OS进行判断,但正如兄所言,有可能会误判。现使用redtek兄的set方法,则能有效解决该问题;但我在WinXP pro sp2的CMD下使用set时需加/a参数,否则不能计算a+=1(原来有此技巧,受教了),不知何故?还烦请redtek兄指教。

2007-2-4 00:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  

多谢lizaoyou兄指正~:)
忘了写 /a 了,哈哈……代码中的错误我改过来了~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-2-4 00:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lizaoyou
中级用户




积分 210
发帖 85
注册 2007-1-14
来自 广东广州
状态 离线
『第 6 楼』:  

发现strings.com有此功能:

@echo off
set z=
strings z=inwin
if not "%z%"=="0" echo This program cannot be run in CMD mode.
if not "%z%"=="0" goto end
...
...
:end

2007-2-4 01:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
TurboY
中级用户

绝不写垃圾帖


积分 322
发帖 99
注册 2004-7-3
来自 湖北
状态 离线
『第 7 楼』:  

好象strings.com等很多工具是在WIN下不能设置环境变量的——所以也能用这个法子来判断。



从95年开始用DOS3.2,96年在Windows3.1里认识了鼠标,97年开始用Win95,98年装过NetWare,99年迷过Linux,现在用WinXP、WinME和DOS7.1。一回首,从盲到忙,从忙到茫。
2007-2-4 04:08
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (123693086)  编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 8 楼』:  

多谢lizaoyou和TurboY兄指点~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-2-4 06:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: