一、关于批处理命令的简单说明
为什么使用批处理命令合并文件
Windows的批处理命令在过去是一种常见和被广泛使用的自动化工具,但随着时间的推移,因其功能相对较为简单、语法复杂、变量处理有限、可移植性差等问题,已无法满足使用。
不过许多场景下它仍然非常有用,比如它可以方便地执行基本的文件操作、系统管理任务,对于一些简单的任务来说是一个有效且快速的解决方案。
而且它在Windows操作系统中仍然起着重要的作用,并被广泛使用,比如我们熟悉的JMeter、Apache Tomcat、Apache Kafka、Elasticsearch、Apache ZooKeeper都是使用.bat文件来启动和管理程序或服务的
二、使用批处理命令合并文本文件
- 背景:在目录merge下有几十个.txt文件需要合并为一个文件
1、使用type命令
首先在merge路径栏中输入 cmd ,然后回车,系统会自动打开命令窗口,并定位到当前目录下
输入以下命令,回车,merge目录下生成一个merged.txt文件,将所有的文件内容进行了合并
type *.txt >> merged.txt
不足:
- type命令合并的文件内容,上下文件间没有换行,会导致下一个文件的内容直接追加在上一个文件的最后一行
- "type"命令只能处理文本文件,无法正确处理二进制文件或包含特殊格式的文件
2、使用for和more命令
将以下命令保存在一个txt文件中,然后重命名为以.bat结尾的文件,如merge.bat,把文件放到merge目录下,双击执行
@echo off
chcp 65001
for %%a in (*.txt) do (
more %%a >>all
)
ren all all.txt
命令说明:
- @echo off :关闭页面回显,即页面不会显示执行过程。
- chcp 65001:改变命令行窗口的字符编码为 UTF-8 ,在 Windows 系统中,默认的命令行字符编码通常是 ASCII 或者根据地区设置。这里切换编码,解决中文乱码情况。
- for %%a in (*.txt) do ():for命令,循环读取所有以 .txt 结尾的文件,并把文件名赋给变量 %%a,在 () 内可以添加需要执行的命令或操作,以对每个文件进行处理。
- more %%a >>all:使用more命令,将内容追加到all文件中。
- ren all all.txt:将all文件重命令为all.txt。
type和more命令简单比较:
type 命令将文本文件的内容一次性显示在命令行窗口上。
more 命令也可以显示文本文件的内容,但它以分页的方式逐页显示,每次只显示一页。
type 命令适合快速查看较小的文本文件内容,
而 more 命令适合查看较大的文本文件内容
释疑:
为什么 more %%a >>all 中使用all文件,而不是直接用all.txt文件
如果直接使用all.txt作为输出文件,那么在合并过程中,all.txt本身也会被当作一个输入文件。这样一来,合并过程可能会出现问题,比如重复内容或者无限循环。
为了避免这个问题,先将所有的.txt文件合并到一个临时的all文件中。然后在合并完成之后,再将这个all文件重命名为all.txt。这样可以确保合并过程的正确性,避免潜在的问题。