Board logo

标题: 如何在DOS批处理中创建一个TXT文件,并写入当前日期 [打印本页]

作者: woshishiu     时间: 2006-10-28 03:19    标题: 如何在DOS批处理中创建一个TXT文件,并写入当前日期

请问如何在DOS批处理中创建一个TXT文件(如today.txt),并写入当前的日期为此文件的内容?另又如何可以在批处理中读取这个文件的内容,并把它赋予一个变量?谢谢
作者: tianzizhi     时间: 2006-10-28 05:27
可以直接把时间赋予变量,
如: 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
作者: electronixtar     时间: 2006-10-28 05:31
如果是纯DOS就不好弄
作者: cchessbd     时间: 2006-10-28 08:33
get 好像可以获得文件、当前日期。不过我在虚拟机用get测试时获取磁盘容量出错。
唉,最近头好大!

还有个 isdate可以拿当前时日期与文件日期比较。自己搜搜吧。
都是dos下的,windows好像不能用啊。
作者: lxmxn     时间: 2006-10-28 08:55

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

作者: redtek     时间: 2006-10-28 23:01
取得纯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 ]
作者: tianzizhi     时间: 2006-10-29 02:50
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 03:24
这个网叶是怎么会是在IE打开里来是D D D D D D D的响,maxthon浏览器里打开就要关闭maxthon浏览器
作者: redtek     时间: 2006-10-29 04:36


  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用于反复调试非常方便:)
作者: lxmxn     时间: 2006-10-29 05:46

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

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