中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 14:58
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 这个备份和升级的批处理如何编写?
可打印版本  3,370 / 14
第1楼 stonelei 发表于 2004-08-25 00:00
初级用户 发帖 14 积分 172
这个备份和升级的批处理如何编写?
首先感谢 Climbing 介绍我认识了这么一个好地方,以前都不知道还有DOS联盟的,老大们可别介意哦.现在关于DOS的知识越来越少啦,这地方可让我们温故知新哦.
闲话不说了,我想提个问题,这个问题我一直没能解决.
> --------------------------------------
> 1. 在C盘上创建一个目录叫TBLBAK,如果有就不创建.再在TBLBAK里面创建一个以日期
命名的目录(或者其他方式命名都可以)
> 2.复制 c:\faspic\tbl*.* 到 C:\tblbak\之前创建的目录\.
> 3.覆盖复制 a:\tbl*.* 到 c:\faspic\.
> 4.检测 c:\tblbak 目录下由本批处理创建的目录是否超过10个,如果超过,就把最早
期建立的删除,即保持最多并且是最后的10个目录.
> 5.一个批处理能否执行完以上的操作?当然临时创建的批处理可以忽略.
>
> ---------------------------------------------


1.难点有几点,一是如何创建一个以日期命令但能让DOS识别的目录名?即年份只能取后面几位,超过了,DOS就不认啦?
2.如果检测自己创建的那些目录中已经超过10个?或自定义的个数?
3.如何智能化地删除早期建立的那个目录,而始终保留10个?
4.除了临时创建的批处理外,如果让一个批处理来执行,可行性有多高?
5.小弟不才,还望各位老大们伸出你们的援手,帮帮我啦.
第2楼 Climbing 发表于 2004-08-25 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
首先告诉我们你这个批处理运行在什么操作系统下,是纯DOS环境还是9x/nt的dos提示符下?求教问题前,先写清楚你的环境。
第3楼 stonelei 发表于 2004-08-25 00:00
初级用户 发帖 14 积分 172
哦,谢谢啦,是纯DOS环境的.是DOS6.22版本.
第4楼 Climbing 发表于 2004-08-25 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
我没有DOS 6.22的环境了,不太好试验,建议你自己先把能写的写出来,然后我们再帮你解决你不能解决的问题。基本上都可以用批处理实现,当然要用到第三方的工具,尤其是Horst的PBAT批处理实用工具。
第5楼 stonelei 发表于 2004-08-25 00:00
初级用户 发帖 14 积分 172
但是根本编不到如果根据日期创建相应目录和检测目录下有多少目录和删除以前的目录呀?
第6楼 stonelei 发表于 2004-08-25 00:00
初级用户 发帖 14 积分 172
有高手知道吗?帮忙编一下吧,尤其是我说的几个难点,就是弄不懂。弄懂几个难点,我的问题早就解决了。
第7楼 Climbing 发表于 2004-08-26 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
你自己一点儿也不努力,让我感觉很失望。Climbing为StoneLei所写的批处理文件(包括所有用到的工具程序,14KB,点击下载)下面是批处理的内容:
第8楼 stonelei 发表于 2004-08-26 00:00
初级用户 发帖 14 积分 172
Climbing 大哥,你的热心帮助真的让我热泪盈眶.小弟在此向你说声"谢谢啦",并会听大哥的教诲,以后更加努力的工作与学习.谢谢啦.
第9楼 autoit 发表于 2004-08-27 00:00
系统支持 发帖 339 积分 904 来自 厦门
石头兄待人可真让人钦佩啊!!!向Climbing致敬!
第10楼 willsort 发表于 2004-09-20 00:00
元老会员 发帖 1,512 积分 4,432
Re Climbing:
Climbing兄的程序已很完善,除了两个细节:
1,检验目录存在时使用if exist c:\directory\nul 的方法无法检测具有隐藏或系统属性的目录是否存在,导致在以后目录创建进程中出错。解决的办法,或者dir c:\directory /a | find "c:\directory" /i,或者attrib c:\directory | find "direcory" /i,然后再用if errorlevel 检测find返回的errorlevel即可。
2,我并不清楚nset如何解析以“-“分隔的日期串,但既然它用到了date命令的输出,就应该考虑到DOS6下date日期格式并非年月日的东方风格,而是月日年的美式风格,除非在config.sys中设置了country属性。所以,在检测目录数目的模块中应该存在问题,请酌情调整。

第11楼 Climbing 发表于 2004-09-20 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
Re Willsort:
Willsort兄真的是精益求精,说实在的,我可真的没有考虑这么细致。
1、如果真的有隐藏或者系统目录,我建议使用者先手工去掉这些属性(不去掉其实也不影响程序运行的)。一般情况下应该不会遇到这种问题。不过谢谢你告诉我这种方法不能用于隐藏或者系统属性的目录(我真的不太清楚)。另外,DOS 6.22下恐怕是没有find这个命令的,这也是一件麻烦事。
2、我上面写的批处理真的是找了一套DOS 6.22系统,然后在虚拟机中安装并调试的,在那个DOS 6.22系统中,Date命令真的显示成yyyy-mm-dd的形式(没有加什么country属性)。不过就算是显示成mm-dd-yyyy也没有关系,只要调整一个nset /S- curdir=$7$5$6就行了。
再次感谢Willsort兄的不吝赐教,其实,写这个程序只是应付差事,我这人一向是比较马虎的,能蒙混过关就行,嘿嘿。
第12楼 willsort 发表于 2004-09-20 00:00
元老会员 发帖 1,512 积分 4,432
Re stonelei:

1,关于日期的获取,我在另一篇帖子里已做陈述,但是考虑到DOS6.22的DATE使用了四位数的年份值,再加上你不想丢失后两位数的要求,再补充一个方法,那就是可以截获DOS下文件的创建和修改日期,大体的代码如下:


2,至于目录数目的判定,可以使用文件列表的变形来操作,主要是使用dir和find,大体代码如下:


3,关于软盘测试,其实可以使用简单的debug脚本来调用dos int21功能实现,这样就可以避免引入第三方程序来解决问题,适合只具有标准DOS配置的环境的。但如果你的条件允许,且对第三方程序并不反感,则可以忽略此一细节。

4,自以上叙述,你应该可以明白这个批处理完全可以用一个文件来实现。事实上,任何多个批处理能够实现的问题都可以通过单个批处理来实现,但是有时出于设计原则的考虑,需要分化出几个模块。

另外,以上的代码部分只是一种基于经验上的脱机设计,并未在DOS6环境中实际测试,你可以根据自己的需要和出现的问题,随时进行调整,并不具有任何形式的版权。

Re Climbing:

刚刚见到你的回复,故在编辑此贴时顺便回复。

find.exe 是从DOS5就被打包一同安装的管道专用外部命令,同样的命令还有fc.exe和more.exe,你的DOS6.22也许不太完整。另外,edlin和debug也属于比较常用的管道命令,可惜edlin在dos6以后被取消,导致批处理对文本串的控制能力大为削弱,但是它在nt系列中却始终存在。

日期格式问题,曾经是我在使用DOS6时很头疼的一个问题,因为不同的country设置,日期格式相差很大,对我的某些批处理程序的通用性带来很大的挑战。你机器上的表现,可能是虚拟机虚拟不彻底的原因,也可能是dos6从不同版本的bios中取日期得到结果不同,或者你的dos6.22并未使用原始配置。

[ Last edited by willsort on 2005-10-13 at 10:29 ]
第13楼 Climbing 发表于 2004-09-20 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
再次感慨学海无涯。
第14楼 jlb007 发表于 2004-09-23 00:00
初级用户 发帖 6 积分 120
我对批处理一点也不明白 那里的汉字用写在里面吗?
第15楼 superking 发表于 2010-03-16 23:38
新手上路 发帖 11 积分 25
很好,受教了,但为什么会和天汇汉字不兼容?
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023