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 == 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 ]