中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何在DOS批处理中创建一个TXT文件,并写入当前日期
作者:
标题: 如何在DOS批处理中创建一个TXT文件,并写入当前日期 上一主题 | 下一主题
woshishiu
新手上路





积分 4
发帖 1
注册 2006-10-27
状态 离线
『楼 主』:  如何在DOS批处理中创建一个TXT文件,并写入当前日期

请问如何在DOS批处理中创建一个TXT文件(如today.txt),并写入当前的日期为此文件的内容?另又如何可以在批处理中读取这个文件的内容,并把它赋予一个变量?谢谢

2006-10-28 03:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tianzizhi
高级用户




积分 622
发帖 214
注册 2006-9-22
状态 离线
『第 2 楼』:  

可以直接把时间赋予变量,
如: set b=%date%
测试一下b的内容可用:echo %b%
会显示:2006-10-27 星期五

另外把当前日期创建并写入txt的命令:echo %date%>today.txt
读取用for : for /f "tokens=1 delims=\" %%i in (today.txt) do @set d=%%i

2006-10-28 05:27
查看资料  发送邮件  发短消息 网志  OICQ (419503077)  编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

如果是纯DOS就不好弄




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-28 05:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cchessbd
高级用户





积分 525
发帖 222
注册 2006-8-28
状态 离线
『第 4 楼』:  

get 好像可以获得文件、当前日期。不过我在虚拟机用get测试时获取磁盘容量出错。
唉,最近头好大!

还有个 isdate可以拿当前时日期与文件日期比较。自己搜搜吧。
都是dos下的,windows好像不能用啊。

2006-10-28 08:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  


  楼上所说的这几个功能,其实都可以用CMD-BAT来完成,只是代码相对来说比较长一点。解决问题最好不要使用第三方工具,如果解决问题一味的依赖第三方工具来完成的话,那么一些事情就根本没什么意义了。我们也不必这么努力学习批处理了。


2006-10-28 08:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





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

取得纯DOS当前日期并赋值给变量,有两种方法:

GetDATE.BAT 内容如下,使用版本: MS-DOS 6.22
@echo off
echo exit|%comspec% /k prompt set mydate=$D$_|find "-">$redtek.bat
call $redtek.bat
for %%. in (%mydate%) do set mydate=%%.
del $redtek.bat >nul
echo %mydate%
第一种方法使用了外部命令(Find.exe 和 Command.com),
但Prompt足可以获得更好玩的内容:)


还有一种方法:(这个批处理文件名必须命名为: CURRENT.BAT)
       (因为我在写这个批处理里的时候为了减少一个临时文件,就让它自己调用自己--回调)


我们能得到的 MS-DOS 6.22 “先天”环境变量就这么多:
PATH=C:\DOS
PROMPT=$P$G
COMSPEC=C:\COMMAND.COM
这种方法不用任何外部命令,但只适用于MS-DOS 6.22等纯DOS(由于日期或时间格式问题)。

CURRENT.BAT 内容如下:
@echo %dbg% off
if not [%4]==[] goto :end
echo.|date>$redtek.bat
$redtek.bat

:end
del $redtek.bat > nul
set mydate=%4
echo %mydate%
原理: 当执行 DATE 内部命令要取得系统日期时,你必须要按回车键。
    因为这个内部命令即是看系统日期又是更改系统日期的命令。

    ECHO. 它代表输出一个空行(回车)
    所以, 需要给 DATE 命令一个“额外”的“自动”的回车符,省得我们按。
    ECHO.|DATE 这样就无需我们按回车键了,自动显示了当前的日期。
    ECHO.|DATE>$REDTEK.BAT  我们它输出的日期重定向到一个文件中。
    这个被重定向的文件被命令为一个批处理类型的文件,因为我们还要它执行。

这是系统日期的输出格式:(在我们重定向的那个批处理中就是这样的格式)
Current date is Sun 10-29-2006
Enter new date (mm-dd-yy):
如果我们经常使用带有参数(%1....%9)这样的批处理,
如:(暂定文件名为 A.BAT)
@echo off
echo  %1   %2   %3   %4
那么当我们执行上面批处理并如下方式带参数执行时:
A.BAT   A   B   C    D    E
会如下显示:  A   B   C   D ,这个A B C D 就是我们输出的被带入的参数%1到%4
所以,我们已经把当含有当前日期的内容重定向到了一个批处理文件内:
Current date is Sun 10-29-2006
Enter new date (mm-dd-yy):
你为什么不能把那行“Current date is Sun 10-29-2006”的内容中“Current”也当做是一个外部批处理文件呢?
象下面这样:
Current.BAT    date  is  Sun  10-29-2006
这样不行吗?当然可以!所以为什么要将那个输出日期重定向成一个可以执行的批处理文件内。

所以,我们要建一个Current.bat的批处理,让它来输出(显示)第4个参数,
当然就是我们想要取得的“10-29-2006”这个参数了。

新建一个Current.bat又要在主批处理程序之外再新建一个临时文件,
所以,干脆我们就用Current.bat来做主批处理文件,然后只生成一个装有被重定向的系统日期的批处理文件即可。

所以,在Current.bat中,我们让Echo.|date>重定向到一个文件中,
然后让那个文件执行,就相当于带了参数了,
那个文件一执行,会调用Current.bat(现在就是我们自己),
让它自己调用自己,
所以在开始部分我们判断一下如果参数非空(说明那个带日期内容的临时批处理文件执行并带参数进来了),
所以我们就流程转到:END段来执行赋值与显示的操作。
如果我们初次运行CURRENT.BAT这个批处理时,当然不会有参数被带进来,
所以系统按照将日期重定向到一个临时文件……的方法来按照我们的思路执行。

即然可以将一个日期或时间什么的内容赋值给一个变量,
那么是否再找它写入一个文件或用它做什么,还会是很难的事情吗?

[ Last edited by redtek on 2006-10-28 at 11:10 PM ]



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

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-28 23:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tianzizhi
高级用户




积分 622
发帖 214
注册 2006-9-22
状态 离线
『第 7 楼』:  

redtek真牛,我看得头大了,懂了一点.
@echo off
echo exit|%comspec% /k prompt set mydate=$D$_|find "-">$redtek.bat
call $redtek.bat
for %%. in (%mydate%) do set mydate=%%.
不懂这几行,我试了一下,那个$redtek.bat里面什么也没有啊,那个日期怎么出来的,????头大了.

@echo %dbg% off
if not [%4]==[] goto :end
echo.|date>$redtek.bat
$redtek.bat
这个怎么解释呀,那个%dbg% 和%4怎么回事呀??????

2006-10-29 02:50
查看资料  发送邮件  发短消息 网志  OICQ (419503077)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


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

这个网叶是怎么会是在IE打开里来是D D D D D D D的响,maxthon浏览器里打开就要关闭maxthon浏览器



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





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



  Quote:
Originally posted by tianzizhi at 2006-10-29 02:50:
@echo %dbg% off
if not [%4]==[] goto :end
echo.|date>$redtek.bat
...

那个 @echo %dbg% off 是为了调试方便的:)
有时候不得不来回来去的改批处理想看看执行的过程到底错在哪里,
调试的时候就要(@echo on),……
可是等调试完了还得改回去(如:@echo off),太麻烦。

所以,  @echo  %dbg% off 加到批处理的第一行,
这样,一般这个批处理执行时这个%dbg%变量是没有内容的,没被定义,
所以,相当于执行了 @echo off ~:)

但是,如果我想调试批处理看看运行过程的时候,
就在DOS命令行上输入: SET DBG=ON

那么,这个dbg就有参数定义了,当执行批处理时,
它会被自动带入参数变成了:  @echo on  off
但,它永远会执行@echo on的功能(即开启命令回显)。

当不想调试了,
就DOS命令行上输入:  SET DBG=
这样就相当于清除了DBG这个变量
于是再运行批处理的时候%dbg%是空的,所以@echo off生效。

另:这个 @echo %dbg% off 不是我发明的,
  是看到这个论坛 “面向对象的批处理语言” 的作者:Will Sort用过这句,
  先开始也是不得其解,没事儿echo off中间加个%dbg%干什么呀?
  看着象Debug缩写?没事儿打个 set dbg=on试试,结果成了。
  可见Will Sort水平之高:)

  个人感觉这个@echo %dbg% off用于反复调试非常方便:)



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

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-29 04:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  


  redtek 真是厉害啊,学习了……

  我当初看 willsort 兄写的这个"@echo %dbg% off"也是不懂其意,现在看见了兄的回复,才知道其意了。


2006-10-29 05:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: