中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问批处理中如何实现命令结果传递给参数?
作者:
标题: 请问批处理中如何实现命令结果传递给参数? 上一主题 | 下一主题
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『楼 主』:  请问批处理中如何实现命令结果传递给参数?

如何在批处理文件中实现类似unix下的shell脚本的参数设定?

例如bash shell脚本中定义NUM参数:
NUM='wc -l test.txt'

不太清楚DOS的批处理文件定义参数时能不能直接调用某个命令的结果?

谢谢!

2005-11-18 22:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 2 楼』:  

希望高手来帮忙看看,谢谢

2005-11-19 17:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 3 楼』:  

自己再顶。。。。。。

如果改一下要求,需要将一个文本文件中的内容赋值给参数,应该如何做?unix下这个很容易,但是dos下的脚本不太容易实现

请dos高手指点一下,谢谢!

2005-11-22 12:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 4 楼』:  

再自己顶,请高手指点一下,再谢!

2005-11-22 21:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 5 楼』:  

NT 下试试用 for 解析文本,你是想得到文本行数并赋值给变量吗?
这段代码可以完成,比 unix 下要烦琐多了。
for /f "tokens=1 delims=:" %i in ('findstr/n /r "." list.txt') do @set NUM=%i


2005-11-23 00:31
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 6 楼』:  

谢谢无奈何朋友!不过我的意思并不是得到文本行数,而是将文本内容读出并赋值给批处理文件中的变量。

我了解到用string命令中的read可以读出指定文件内容并赋值给变量,但是不知道除此之外还有没有其它更好的方法。

其实我的最终问题是想知道:
dos下的批命令如何能实现执行结果赋予变量?(unix环境下是很容易实现,直接定义即可)

2005-11-23 08:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 7 楼』:  

我给出的就是一个抓取命令输出的特定实例,完成的功能是获取文件行数。
而原始命令是 findstr/n /r "." list.txt
你自己看一下 for 帮助,见 for /?
这不是几句能说明白的。

2005-11-23 09:49
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 8 楼』:  

谢谢无奈何朋友,我原来比较熟悉unix的shell脚本,对dos下的批处理命令不太熟悉,谢谢你的指点。我先看看for的用法,希望以后能再交流:)

2005-11-23 23:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 9 楼』:  

Re wind_7th:

      首先,纯DOS平台和NTs'CMD都不具有简单、直接而且强有力的保存程序输出结果到变量(这里指环境变量)的特性或者命令。

      其次,我们可以通过一些命令的简单组合,完成最简单的保存任务,即保存输出结果的第一行内容到环境变量。

      在 NTs'CMD 下,可以使用以下代码(令人疑惑的是,set /p 支持重定向而不支持管道,不知有谁可以解惑?),当然无奈和兄提供的 for /f 的方案也是很好的。

command arguments > output.txt
set /p output= < output.txt
del output.txt

      在纯DOS下,我最早采用的是预先编写环境声明头文件的方案,具体细节见[1];不久,鉴于此方案必须事先编辑头文件的缺点,我就改用 debug 来动态生成这个头文件,实现了脚本的自给自足的完全自动化,代码见[5]中1、2、3楼的程序,它们均是实现对 dir 命令输出的保存和分析来完成相应的变量操作。其中的 :init 段便是此原理的集中应用。后来我又尝试过其它 edlin/date/prompt等诸多方案,但均有局限,使用于不同的应用场合,都不如 debug 来的通用。

      最后,如果要实现更复杂的变量保存,比如保存指定行、指定单词、指定列的文本,或者过滤诸如 管道、重定向等一些命令行特殊符号,就需要使用更复杂的代码。

      在 NTs'CMD下,可以使用 set、for、find 等内部命令对文本内容进行控制。而在纯DOS下,这种控制的实现是通过更复杂的 debug 脚本再加上 find 对文本内容(见[5]中的最后两个代码);或者使用诸如 LMOD[2][3]、NSET[4] 、strings、awk、sed 等第三方工具来实现这些任务。

      以上提供了诸多方案,但是请记住,没有一个程序或者方案能完善无缺、简洁有效的处理所有问题。我们应该首先熟悉这些方案以及它们的优缺点,然后根据再具体环境斟酌选择。

参考资料:
[1]请问如何将一个命令的输出赋给一个变量(SET头文件)
http://www.cn-dos.net/forum/viewthread.php?tid=6318

[2]请教如何让一个变量来存放一个命令的结果(LMOD)
http://www.cn-dos.net/forum/viewthread.php?tid=14250

[3]如何用echo命令输出另外一个命令的执行结果(LMOD)
http://www.cn-dos.net/forum/viewthread.php?tid=16748

[4]如何将txt文件中的内容赋值给变量?(NSET)
http://www.cn-dos.net/forum/viewthread.php?tid=12413

[5]三个进行文本遍历操作的批处理程序(后增补为6个)
http://www.cn-dos.net/forum/viewthread.php?tid=9588



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-11-24 17:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wind_7th
初级用户




积分 142
发帖 13
注册 2004-7-4
状态 离线
『第 10 楼』:  

谢谢版主老大的回复!研读中……:)

谢谢!

2005-11-24 21:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: