Board logo

标题: 使用批处理简单实现【批量建立文件】 [打印本页]

作者: ziver     时间: 2006-7-15 22:21    标题: 使用批处理简单实现【批量建立文件】
这个是我发的第一个帖子,只希望能对初学者有些帮助,望高手莫见笑!
共同进步ing...

今天写了不少代码,总是重复的建立一下.cpp文件。
于是想到用前些天学习的批处理来实现这个重复度较高的过程吧...
学而用之...

事出有因:
今天建立了一些这样的文件
vc1_1.cpp vc1_2.cpp vc2_1.cpp vc2_2.cpp vc2_3.cpp...
当然下次我还要建立一些vc3_1.cpp.....
N多的无聊过程岂是我能容忍

思路分析:
首先想到的是如何在DOS中建立一个文件,而不是文件夹
而DOS中并没有能直接建立文件的命令(也许是我没有学到吧),可以考虑edit filename.ext但每次都会打开DOS文件编辑窗口,所以行不通。
于是想到用COPY命令来实现,即用一个空的文件作为被拷贝的源文件来产生一系列的目标文件

具体实现:
首先在下建立了一个名为null.nul的空文件
在下建立了一个makefill.bat的批处理文件以实现<b>批量建立文件</b>
makefill.bat的代码如下示
@ECHO OFF
FOR /L %%a IN (1,1,%2) DO IF NOT EXIST vc%1_%2.CPP COPY D:\MYPROJECTS\NULL.NUL vc%1_%%a.cpp

这里用到了@ECHO OFF隐蔽DOS下命令的显示

代码解释:
只用到了一条命令实现了预想的功能
FOR /L %%a IN (1,1,%2) DO IF NOT EXIST vc%1_%2.CPP COPY D:\MYPROJECTS\NULL.NUL vc%1_%%a.cpp


makefile.bat 用到两个命令行参数%1和%2分别对应产生的文件中的两个数字

在DOS下输入我们看到一下一段帮助文档
FOR /L %variable IN (start,step,end) DO command 

该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。

这个正是实现文件名中第二个数字的方法

语句
IF NOT EXIST vc%1_%2.CPP COPY D:\MYPROJECTS\NULL.NUL vc%1_%%a.cpp
用以判断所要建立文件的存在性
如果文件不存在,则建立…………这样避免覆盖已经存在的文件

实际应用:
makefile.bat所在的文件夹输入makefile 4 2


D:\MyProjects\vc>FOR /L %a IN (1 1 2) DO IF NOT EXIST vc4_2.CPP COPY D:\MYPROJECTS\NULL.NUL vc4_%a.cpp

D:\MyProjects\vc>IF NOT EXIST vc4_2.CPP COPY D:\MYPROJECTS\NULL.NUL vc4_1.cpp
已复制 1 个文件。

D:\MyProjects\vc>IF NOT EXIST vc4_2.CPP COPY D:\MYPROJECTS\NULL.NUL vc4_2.cpp
已复制 1 个文件。


小节:
很简单的一个bat文件,没有什么大的技术含量
只是想说明一点,学到的一些东西要能灵活应用才好,要能解决一些碰到的问题
不然学习编程意义何在?

对于学习批处理推荐一本书《MS-DOS6_2批处理文件高级指南》
感谢中国DOS联盟的朋友 qb45 将此书赠与我!

参考文章批处理详细教程


文章链接:使用批处理简单实现【批量建立文件】

作者: chenall     时间: 2006-7-16 20:48
跟据上来的代码来看,你的系统应该是2000以上的系统.
1.如何在DOS中建立一个空文件?
可以使用如下命令.
copy nul file.ext
2.IF NOT EXIST vc%1_%2.CPP 这句我想应该改成
IF NOT EXIST vc%1_%%a.CPP 才符合要求.

作者: IceCrack     时间: 2006-7-16 21:09
《MS-DOS6_2批处理文件高级指南》 这个书在哪啊!在他的空间上没有找到

作者: htysm     时间: 2006-7-18 12:58
2.IF NOT EXIST vc%1_%2.CPP 这句我想应该改成
IF NOT EXIST vc%1_%%a.CPP 才符合要求.

高手!