Board logo

标题: 不用LMOD,纯DOS下批处理可以建立日期目录吗? [打印本页]

作者: stonelei     时间: 2004-8-28 00:00    标题: 不用LMOD,纯DOS下批处理可以建立日期目录吗?

前几天Climbing朋友帮编了一个备份升级的批处理,但调用了几个实用小工具,
现在很想用一个批处理而不调用来完成.进行升级,不知是否算是异想天开.
首要问题就是如何建立以当前日期命名的目录名,例如2004-09-01日就自动建立0901的目录.
我搜索了论坛的所有贴子,但不是不能建立一个完整的目录,就是要调用LMOD,
因为DOS下不能超过8位数的文件名,而DOS622的日期格式是 09-01-2004 这样的.
如果按前面的说话,不用调用,批处理可以建立这样的目录吗? 0901
是否批处理真的没办法实现这样的功能?因为我见到论坛关于日期目录的讨论也不少,就是
没有真正用批处理完成一个完美的日期录建立的.
谢谢高手提出解决方案.



作者: Climbing     时间: 2004-8-28 00:00
不使用第三方工具,纯粹使用DOS 6.22的内部命令,这个基本上比较难。至少我不知道如何去做,如果willsort也没有好办法,估计就真的不太可能了。
作者: stonelei     时间: 2004-8-28 00:00
我现在有一个想法,就是把当前日期保存到临时文件中:echo %date%>a.txt然后再取a.txt 的某部分字符(日期)成为变量,再根据变量建立目录.再删除临时文件 a.txt这样的构思不知可行否?
作者: stonelei     时间: 2004-8-28 00:00
在论坛上http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=4487&page=72
找到了个QBASIC的,但不用BAS保存,不知可不可以直接编译成EXE文件执行,即
我想要的结果是只用一个文件解决问题.

10 F0$="1.txt" :rem --------------------- 你要备份的文件名
20 P0$="C:\abc\":rem -------------------- 你原来的目录名
30 P1$="C:\abc\":rem -------------------- 你要放备份文件的目录名(这里是相同)
40 M$=MID$(DATE$,1,2):rem --------------- 取月
50 D$=MID$(DATE$,4,2):rem --------------- 取日
60 Y$=MID$(DATE$,7,4):rem --------------- 取年
70 S$=Y$+M$+D$:rem ---------------------- 按年、月、日生成备份文件
80 F1$=S$+".txt":rem -------------------- 给备份文件名加上扩展名(这里是.txt)
90 C$="copy "+P0$+F0$+" "+P1$+F1$:rem --- 生成DOS命令串
100 SHELL C$:rem ------------------------ 用SHELL来执行DOS命令串
110 END

用Sav-DAY.BAS文件名存盘

用的时候将下列命令加到批处里就可以了!
BASIC.EXE Sav-DAY.BAS

作者: autoit     时间: 2004-8-29 00:00
for /f好象可以分离日期的...
作者: stonelei     时间: 2004-8-30 00:00
还有朋友有更好的解决方法吗?难道在DOS622下靠BAT真的不能生日一个完美的日期目录?[em06]
作者: stonelei     时间: 2004-8-30 00:00
查过以前 WILLSOFT的贴子,其中有一例很相似,但我看不太懂.请哪位高手帮忙解析一下好吗?@echo off
echo set time=%%3>current.bat  
echo.|time>setclock.bat
call setclock.bat
echo set week=%%3>current.bat
echo set date=%%4>>current.bat
echo.|date>setclock.bat
call setclock.bat
del current.bat
del setclock.bat

作者: willsort     时间: 2004-9-18 00:00
To stonelei :
  这个程序基本可以满足你的要求,在win98Command和DOS7下测试可以生成09-15-2004的目录名,估计在DOS6下应该生成类似09-15-04的名字。
  原程序是一个比较通用的命令行下获取时间变量的程序,我当时是在DOS6.22下编写并测试通过的。但它不适用于中文化的DOS系统或者命令行环境,NT系列的CMD.EXE也因此无法使用,在其命令行环境中缺省设置了时间变量,所以也用不着此程序。
  至于解析,但愿以下内容对你有所帮助。
@echo off
echo set time=%%3>current.bat
rem 将文本set time=%3输出到current.bat中,准备作为命令调用。

echo.|time>setclock.bat
rem 将当前时间信息输出到setclock.bat中
rem echo.输出一个结束time需要的回车符,由管道符号"|"传给time
rem setclock的文本内容第一行类似于 Current time is   22:00:02.41
rem 也准备作为命令调用,第二行执行不到可以不用管

call setclock.bat
rem 调用setclock后返回(因为有Call)
rem setclock的执行中再调用current.bat而不返回(因为没有Call),所以第二行被跳过
rem 而time is  22:00:02.41 则成为了current执行时的命令行参数
rem 而current.bat的 set time=%3 意为将第三个参数赋给变量time,正是22:00:02.41
rem 将程序命令输出的文本信息作为再次作为程序命令执行,是这个批处理用到的最大的技巧。此技巧可以用于完成很多相当复杂批处理控制

rem 以下是日期变量的获取,与时间变量类似,不用赘述。
echo set week=%%3>current.bat
echo set date=%%4>>current.bat
echo.|date>setclock.bat
call setclock.bat
del current.bat
del setclock.bat
  另外,请注意,我的ID是willsort,而非WILLSOFT,我的职业与软件销售毫无关联。

[此贴子已经被作者于2004-9-19 20:34:48编辑过]



[ Last edited by willsort on 2005-7-16 at 22:14 ]
作者: Climbing     时间: 2004-9-19 00:00
呵呵,这个方法果然是妙极。学海无涯啊。
作者: kavenlee72     时间: 2005-10-15 22:54
但今天刚试过,setclock.bat和current.bat里没有可执行命令,运行这两个批处理的结果是提示“Current"既不是内部命令也不是外部命令等一大串提示。
作者: willsort     时间: 2005-10-15 23:13
Re kavenlee72:

      请注意程序的适用和测试环境!
作者: zh0159     时间: 2005-10-16 00:33


  Quote:
Originally posted by kavenlee72 at 2005-10-15 22:54:
但今天刚试过,setclock.bat和current.bat里没有可执行命令,运行这两个批处理的结果是提示“Current"既不是内部命令也不是外部命令等一大串提示。

setclock.bat和current.bat这两个文件只是在这个批处理中用来判断当前日期的而生成的临时文件,判断完毕后由后面的两行:

del current.bat
del setclock.bat

直接删除了,所以你再执行这两个批处理的结果就提示既不是内部命令也不是外部命令(文件没有了)。
作者: wubozh     时间: 2006-3-8 23:12    标题: 前段时间刚才要用到这个,学着做了一个,看能不能用?

if not exist %date:~4% md %date:~4%