按指定方式排序合并文件

我们经常使用ctrl+c、ctrl+v来复制粘贴内容,文件、文件夹也是一样,在windows的资源管理器也可以通过用ctrl+c、ctrl+v来拷贝文件,这在dos窗口下,相当于使用copy命令。

copy命令是一个非常实用的命令工具,我们还可以使用它来合并文件,如把两个文件合并成一个,我们可以:

copy a.txt+b.txt c.txt

相当于把a.txt和b.txt合并成一个,并生成c.txt。

如果是一组文件,我们可以:

copy *.txt all.txt

相当于把所有txt文件合并成一个,并生成all.txt。

但是,所有文件是按照什么排序的呢?文件名还是文件修改时间?

不知道。

不过和dir查询的顺序是一样的。

如果想按照指定的顺序合并,如按照文件名或修改时间,查看了copy的参数没有找到,不过dir是有的:

dir /on	    按文件名称顺序查看
dir /os     按文件大小顺序查看
dir /od     按文件修改时间顺序查看
dir /oe	    按文件后缀名顺序查看

我们可以把dir的结果反馈给copy,我想到了批处理的for循环,因此:

for /f %%i in ('dir /b /on *.txt') do ???

for循环后面的do就是我们要做的事。

文件名已放到%%i变量中,怎么从%%i中取出来呢?

批处理里需要延时,设置

setlocal enabledelayedexpansion

才能将%%i赋给临时变量,但延时又不能复制全部文件,只能复制最后一个文件。我研究了一下,发现使用type命令可以读取文件内容,我们把文件内容重写到新文件里,因此有了如下代码:

@echo off

setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /b /on *.txt') do (
	set docname=%%i
	type "!docname!" >> all.txt
)

endlocal

其中,添加delims=是解决文件名中有空格的问题。

当然,文件不能太多,不能太大,还得是文本文件。

这要在linux里,和type相当的是cat命令,不过cat命令有参数控制排序方式,默认是按文件名:

cat *.txt > all.txt

还是linux简单!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值