原创 bat学习 Bat批处理学习站
需求
比如我现在有一文本文件,我要上传,但是太大(文件8-12M之间),不允许,我想把它分割成N个小文件(按行分割,行数可以自行设定),文件内容全部是数字和部分符号,比如内容:
1 2 3 4 5 6+7
2 3 4 5 6 7+8
3 4 5 6 7 8+9
4 5 6 7 8 9+10
5 6 7 8 9 10+11
6 7 8 9 10 11+12
7 8 9 10 11 12+13
8 9 10 11 12 13+14
9 10 11 12 13 14+15
10 11 12 13 14 15+16
现在想用批处理自动把它分割成N个文本文件,要求为按行分割(行数可以自行设置)这次比如共10行,我要分成每2行一个文件,则第一个为
1 2 3 4 5 6+7
2 3 4 5 6 7+8
第二个文本的内容为
3 4 5 6 7 8+9
4 5 6 7 8 9+10
第三个文本的内容为
5 6 7 8 9 10+11
6 7 8 9 10 11+12
.................
这个批处理该如何写呢?
解决代码
@echo off
set file="Test.txt"
set per=100
for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
set /a count=per-1, n=0
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in (!file!) do (
set /a count+=1, n=count/per
echo %%a>>"!dpn!__!n!!x!"
)
代码解析
这段批处理脚本的功能是将一个文本文件Test.txt分割成多个小文件,每个小文件包含原文件中的100行。以下是脚本的详细解释:
脚本功能概述
设置文件名和每份文件应包含的行数。
获取文件的驱动器路径和扩展名。
初始化计数器。
启用延迟变量扩展。
逐行读取文件内容,并根据行数将内容写入不同的小文件。
脚本详细解释
@echo off
#关闭命令回显。
set file="Test.txt"
#设置要分割的文件名为Test.txt。
set per=100
#设置每份小文件应包含的行数为100。
for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
#获取文件的驱动器路径(dpn)和扩展名(x)。
set /a count=per-1, n=0
#初始化计数器count为99(因为是从0开始计数的),n为0。
setlocal enabledelayedexpansion
#启用延迟变量扩展,以便在循环中动态更新变量。
for /f "usebackq delims=" %%a in (!file!) do (
set /a count+=1, n=count/per
echo %%a>>"!dpn!__!n!!x!"
)
#逐行读取文件内容。每读取一行,计数器count加1。计算当前行应该写入哪个小文件(n=count/per)。将当前行的内容追加到相应的小文件中。
注意事项
此脚本假设文件名是Test.txt,如果需要处理其他文件,请修改set file="Test.txt"这一行。
如果文件非常大,这个脚本可能会运行很长时间。
这个脚本没有错误处理机制,如果文件不存在或无法读取,脚本将失败。
总之,这是一个用于分割大文本文件的批处理脚本,适用于需要将一个大文件拆分成多个小文件的场景。