中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-06 23:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问批处理可以按要求拆分多个文本文件吗 查看 961 回复 8
楼 主 请问批处理可以按要求拆分多个文本文件吗 发表于 2007-10-15 13:07 ·  中国 江苏 镇江 电信
新手上路
积分 6
发帖 2
注册 2007-10-15 12:20
18年会员
UID 99792
性别 男
状态 离线
我想把一个文件夹下多个文本,按30行来拆分,并保存在指定的文件夹里,并用原文件名命名。
比如:文件夹里有a.txt、b.txt、c.txt....把他们按30行来分割,保存在d:\wj里,并命名为a1.txt、a2.txt、a3.txt....b1.txt、b2.txt...c1.txt、c2.txt....如何实现?
2 发表于 2007-10-15 15:54 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
a.txt 按30行一个文件拆分为a1.txt、a2.txt、a3.txt ?
3 发表于 2007-10-15 16:37 ·  中国 江苏 镇江 电信
新手上路
积分 6
发帖 2
注册 2007-10-15 12:20
18年会员
UID 99792
性别 男
状态 离线
是的
4 发表于 2007-12-25 20:10 ·  中国 云南 昆明 电信
初级用户
积分 64
发帖 27
注册 2007-03-08 21:35
19年会员
UID 81100
性别 男
状态 离线
我也想知道这个...
要是能按分章节拆分的话更好...
5 发表于 2007-12-25 20:57 ·  中国 浙江 温州 瓯海区 电信
中级用户
★★
积分 458
发帖 196
注册 2006-10-05 12:04
19年会员
UID 64614
状态 离线
Usage: split.exe ]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
PREFIX is `x'. With no INPUT, or when INPUT is -, read standard input.

-b, --bytes=SIZE put SIZE bytes per output file
-C, --line-bytes=SIZE put at most SIZE bytes of lines per output file
-l, --lines=NUMBER put NUMBER lines per output file
-NUMBER same as -l NUMBER
--verbose print a diagnostic to standard error just
before each output file is opened
--help display this help and exit
--version output version information and exit

SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.

Report bugs to <bug-textutils@gnu.org>.


附件无法上传.咋办
6 发表于 2007-12-25 21:57 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
google搜索“UnxUtils”
里面有split
7 发表于 2007-12-25 22:07 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
能满足否?

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul') do (
set id=1
set num=
for /f "tokens=1,* delims=:" %%a in ('findstr /n .* "%%i"') do (
set/A num+=1
echo/%%b>>"d:\wj\%%~ni!id!.txt"
if !num! GEQ 30 set/A id+=1&set num=
)
)
pause
简单!简单!再简单!
8 发表于 2007-12-25 22:10 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
通过for计数输出会忽略空行,原来讨论过这个问题,好像没办法,否则代码太烦琐,过大文本太慢
9 发表于 2007-12-25 22:55 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
找到一个方法

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('dir /b *.txt') do (
for /f "skip=2 tokens=1* delims=" %%b in ('find /v /n "" "%%a"') do (
set /a num=%%b/30+1
echo.%%c>>"%%~dpna!num!%%~xa"
)
set num=
)
论坛跳转: