中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 22:43
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 【cmd人性化贡献】愿意真正为cmd做点东西的进
可打印版本  951 / 9
第1楼 plp626 发表于 2009-05-29 09:27
银牌会员 发帖 1,020 积分 2,278
【cmd人性化贡献】愿意真正为cmd做点东西的进
今天发了两个帖子解决了问题,很感谢论坛的会员们
接着
突发奇想,再继续发散思维下特有如下想法,想让cmd人性化点

大家都知道脚本中可以用call方法调用子过程,但是这种方法很麻烦
要人为设定返回变量,然后再用,习惯了高级语言后对此种调用发法很不爽,还有cmd不支持浮点运算,数学函数自然不能用,(论坛里有个math.exe,就很好大家可以搜索关键字math,正式这个math.exe让我产生此想法)

提议写个解释器(命名expr),把子过程的call方法封装 对子过程的调用用高级语言的 varable=fun(arg1,arg2,,,) 形式,对于有返回值的函数用等号去接受,(这一点p可以说是得天独厚,是大多数语言无法比拟的,因为它没有变量类型)
expr var=fun1(arg1, arg2, ... fun2(p1, p2, ...)) ; var2=fun3(...) ; fun4(....);

现在想到一个问题就是如果expr作为三方工具,那么var的值只在expr的生存期有效,当expr将控制权返回给cmd时,用
return var;
却要求为int型,而且cmd能接受的只有errorlevel变量,看来要做不只有这些了
若再换一种思路,不return var; 而是printf("%s", var); 然后再写个bat脚本for /f
去抓取信息,
于是产生用纯批处理写expr的想法,但是效率可想而知,
于是还是回到用 c语言+bat的for /f的思路

若真是喜欢cmd(linux的强大正是有众多的fans一点一滴地积累而成)愿意给它做点东西,开始吧
第2楼 slore 发表于 2009-05-29 10:00
铂金会员 发帖 2,478 积分 5,212
给个系统环境变量保存char类型的结果,integer就用errorlevel
当然都用系统环境变量也可以
第3楼 netbenton 发表于 2009-05-29 11:00
银牌会员 发帖 752 积分 1,916 来自 广西
这样调用子程序,并返回结果,也不是很麻烦呀?

第4楼 plp626 发表于 2009-05-29 11:30
银牌会员 发帖 1,020 积分 2,278
Originally posted by netbenton at 2009-5-29 11:00 AM:
这样调用子程序,并返回结果,也不是很麻烦呀?

第5楼 knoppix7 发表于 2009-05-29 23:27
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
弄过这个东西..
卡在对括号的划分上..
第6楼 knoppix7 发表于 2009-05-29 23:28
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
只是想到过一个框架..

@echo off
setlocal (开不开延迟自己看着办.不过开一层有好处)
Code.
Code..
..
.
Endlocal&set return=%结果%

省的清理临时变量了.而且结果也能传回去.
第7楼 everest79 发表于 2009-05-30 01:08
金牌会员 发帖 1,127 积分 2,564
我记得C语言有个
system(cons char *command)

expr var=...

int main(char *agv){
char *ar1="var="
char *ar2="..."
char *name=new char[200];
strcat(name,ar1);
strcat(name,ar2);
system("set name");
return 0
}
第8楼 plp626 发表于 2009-05-31 04:16
银牌会员 发帖 1,020 积分 2,278
其实想一想 C 的 main 函数 原型
int main(....)
没见过(起码我没见过) *char main (....)
就知道 这个想法的难度
第9楼 plp626 发表于 2009-05-31 04:19
银牌会员 发帖 1,020 积分 2,278
鞥。。。
我发现不是这样简单的思考,难道。。。。?
第10楼 knoppix7 发表于 2009-05-31 05:45
银牌会员 发帖 634 积分 1,287 来自 cmd.exe
好吧...我只能围观了..
C之类的见都没见过...

能直接用内存写入把命令写入CMD就爽了...
星际上我是干过这事...可CMD连数组都没有我到哪里下手去..XD
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023