中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 纯DOS下如何用for提取文本内容
作者:
标题: 纯DOS下如何用for提取文本内容 取消高亮 | 上一主题 | 下一主题
anyppop
新手上路





积分 12
发帖 6
注册 2006-10-8
状态 离线
『楼 主』:  纯DOS下如何用for提取文本内容

在纯DOS下我有一个文件time.txt里面的内容只有一行 22:00
请问一下我如何用for命令把这一行22:00作为一个变量


──────────────── 版务记录 ────────────────
执行:namejm
原标题:问一个关于for命令
修改后标题:纯DOS下如何用for提取文本内容
说明:因标题过于模糊,不便于论坛的搜索和管理;在本提示发表三日之后,
  楼主仍未修改标题。
处罚:本人强制修改标题,并扣除楼主4点积分,以示惩罚。
  请点击
这里阅读论坛发帖规定,以避免在今后的讨论中违规发帖。
──────────────── 版务记录 ────────────────


[ Last edited by namejm on 2006-11-8 at 09:58 PM ]

   此帖被 -4 点积分     点击查看详情   
评分人:【 namejm 分数: -4  时间:2006-11-9 09:55


2006-11-4 12:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yuanzijia08
初级用户





积分 78
发帖 30
注册 2006-6-17
来自 湖南湘潭
状态 离线
『第 2 楼』:  

for /f "tokens=*" %%i in (time.txt) do  (
   set line=%%i
   goto:****
)
应该在****这个段里面 引用%line%这个环境变量就没问题了

不知道行不行  不行的话请原谅  (本人也是初学者)

2006-11-4 14:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
amao
中级用户





积分 316
发帖 152
注册 2006-6-18
状态 离线
『第 3 楼』:  

2楼没有看清楼主的要求-“在纯DOS下”,呵呵
在纯DOS下,用for不行,如果不借助第三方工具,实现起来很繁琐复杂。
用第三方工具就简单多了
建议楼主搜索论坛相关帖子,有很多

2006-11-4 19:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 4 楼』:  

用WBAT可以实现



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-4 19:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





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



  Quote:
Originally posted by anyppop at 2006-11-4 12:29:
在纯DOS下我有一个文件time.txt里面的内容只有一行 22:00
请问一下我如何用for命令把这一行22:00作为一个变量

测试版本: MS-DOS 6.22

在纯DOS下获得一个文本文件内容的第一行(仅一行)到变量的方法。
这个方法并不难,使用了批处理运行时可以带入%参数的原理和重定向的原理来实现。

例:要读取名为  TIME.TXT  纯文本文件内的第一行内容(假设仅一行),
  而且假设根本不知道这个TIME.TXT纯文本文件的内容是什么,
  而且假设这个文本文件的第一行没有非法字符、没有空格(有空格用就多加%参数就行了)
  但就想读它到变量。

如果要读取的 TIME.TXT 内容如下:
22:00
那么用于读取Time.txt内容的批处理文件如下,
请给下面的批处理文件取名为:  Enter.bat (请一定要取这个名字,如果改名的话则运行出错)
@echo %dbg% off
if not [%4]==[] goto :end
date<time.txt>$redtek.bat
type $redtek.bat|find "Enter">$redtek.bat
$redtek.bat

:end
del $redtek.bat > nul
set mydata=%4
echo %mydata%
DOS内部获得/设定当前日期的命令是 DATE,
如果你将一个设定好的日期存到一个文本文件内,那么就可以 DATE<TIME.TXT来重定向的方式设置日期了。

那么,如果TIME.TXT中你输入的是非标准的日期格式内容,甚至是一个人的名字,哈哈……
但是,当你使用重定向的到日期设置的时候,DOS内部日期查看设置的命令DATE就会提示出错信息,
不用管它提示出错,因为你的重定向原理已经将那个非法的文本文件中的字符串提交给了DATE,
所以,显示错的时候照样显示了你的那个字符串。
所以,再把它重定向到一个其它的文本文件中,
那么这个含有错误的(你在文本文件中写的字符串)和在这个字符串前的Enter等提示输入日期的内容都将在一行,
被重定向到一个新的文本文件中。

这时候,就可以当那个提示“Enter”你就当它是一个名为Enter.bat的批处理文件,
假如  Enter.bat   a  b  c  d 带参数运行了,
那么 %1 就是a,%2就是b……
所以,利用批处理带参数的原理就把文本文件中的那一行内容取出来了,
再用 set mydata=%4,当然就将带进来的参数%4赋值给了 mydata这个变量。
变量都赋值了,想怎么用就怎么用吧~:)


注:上面批处理中:
type $redtek.bat|find "Enter">$redtek.bat
上面这一行只不过是使用了外部Find.exe来滤过一个含有Current字符串的内容,
只为是把含有这些内容字符串的文件当做一个批处理来运行(为了提参数),
但这个Current同样会被当做一个名为了Current的可执行文件或批处理来运行,
当然没有这个文件了,所以DOS必然提示Bad command……坏的没有这个命令的提示,
不喜欢这个错误提示,所以就使用find.exe 滤过去了。

不过,如果不喜欢外部的命令,就喜欢用内部命令照样可以实现的想法,
那么去掉这行,就真的纯粹使用了内存命令,照样可以取得你要得到的字符串,
就是会提示一行错误信息,哈哈……



================================
可能上面并没有说得很清楚:)
因为在虚拟机内装的 MS-DOS 6.22,实在不方便把在纯DOS执行的每一个步骤都再从虚拟机里复制在这里。



详细的原理可以参考下面这个贴子:

------------------------------------------------------------------------------
如何在DOS批处理中创建一个TXT文件,并写入当前的日期
http://www.cn-dos.net/forum/viewthread.php?tid=24259&sid=MqOPm1
------------------------------------------------------------------------------


上面的贴子里有详细的介绍和与这个读文本文件内容相似的(原理相似)内容以及多个步骤是怎么实现的。

[ Last edited by redtek on 2006-11-5 at 12:16 AM ]



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

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-5 00:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anyppop
新手上路





积分 12
发帖 6
注册 2006-10-8
状态 离线
『第 6 楼』:  

楼上的太复杂了点。
不知道版主说的的WBAT如何实现呀。

2006-11-5 00:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





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

WBAT从来没用过,不好意思~:)

请anyppop兄在论坛 ”搜索“ 功能里输入关键词:  WBAT 
会找到相关的它的使用说明~:)

[ Last edited by redtek on 2006-11-5 at 01:11 AM ]



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

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-5 01:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 8 楼』:  

参考:

http://www.cn-dos.net/forum/view ... W14Z&sid=Y8W14Z
http://www.cn-dos.net/forum/view ... 7%8F&sid=Y8W14Z

2006-11-5 05:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
anyppop
新手上路





积分 12
发帖 6
注册 2006-10-8
状态 离线
『第 9 楼』:  

找了好久都没有找到
版主你说的的WBAT如何实现呀

2006-11-5 10:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
anyppop
新手上路





积分 12
发帖 6
注册 2006-10-8
状态 离线
『第 10 楼』:  

顶一下,兄弟们帮帮忙啊。这个问题把我烦死了

2006-11-8 08:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





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

从anyppop兄1楼发贴到最后一贴都4天过去了,
wbat就是一个一个参数的试也该全玩过N遍了吧?
怎么能烦死那?哈哈 ~:)



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

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-9 00:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anyppop
新手上路





积分 12
发帖 6
注册 2006-10-8
状态 离线
『第 12 楼』:  

我试了一下,WBAT是可以提取,但会跳出一个窗口来。
不知道正确的方法是怎么样的

2006-11-9 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 13 楼』:  

以前这论坛里有人教过我一个办法。
不过是从侧面解决这个问题。
你看下。
比如,你要把 22:00 读到变量 time 中去。
那你就直接搞个 time.bat 。
内容是: set time=22:00
要读时间的时候 call time.bat 一下。

2006-11-9 22:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 14 楼』:  

不知道4DOS如何



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-9 23:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honhaizh
初级用户





积分 35
发帖 18
注册 2006-4-26
状态 离线
『第 15 楼』:  

呵呵

2006-11-16 20:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: