想要将每个文本文件拆分为一个文件

时间:2014-01-20 16:33:10

标签: windows file batch-file split

我有一个每天生成的文本文件,该文件有20到50行,每行以一个设置分隔符结束,当前〜但可以更改为任何内容。我想把这个文本文件分成20到50个不同的文件,每个文件一行。理想情况下,我想从Windows批处理文件中执行此操作,或者至少是我可以编写脚本以便每天运行的程序。感谢您提供的任何帮助,谢谢!

示例输入文件:

GS*SH*CSMZ9*20131209*0908*000000001*X*004010|ST*856*0001|BSN*00*000000001~
GS*SH*CSMZ9*20131209*0912*003400004*X*004010|SG*834*0001|TSN*00*000000004~
GS*SH*CSMZ5*20131209*1001*000040007*X*004010|ST*855*0001|BSN*00*000000007~
GS*SH*CSMZ9*20131209*1019*000000010*X*004010|SG*856*0001|BGN*00*000000010~

4 个答案:

答案 0 :(得分:4)

for /f "tokens=1*delims=:" %%a in ('findstr /n "^" "file.txt"') do for /f "delims=~" %%c in ("%%~b") do >"text%%a.txt" echo(%%c

答案 1 :(得分:0)

我在这里提出了python。任何shell脚本都更具可读性。

f=open("filename")
lines = f.read().split('~')
for (n, line)  in enumerate(lines):
    open( "newname{}".format(n), "w" ).write(line)

答案 2 :(得分:0)

这应创建名为00000001.txt的文件,并增加每行的编号。

如果任何行包含!,则需要进行额外修改。

@echo off
setlocal enabledelayedexpansion
set c=0
for /f "delims=" %%a in (file.txt) do (
   set /a c+=1
   set name=0000000!c!
   set name=!name:~-8!.txt
   >!name! echo %%a
)

答案 3 :(得分:0)

@ECHO OFF
SETLOCAL
SET "destdir=c:\destdir"
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n "." q21239387.txt') DO (
 >"%destdir%\filename%%a.txt" ECHO(%%b
)

GOTO :EOF

其中q21239387.txt是我用作测试输入的文件的名称。

在目标目录中创建的文件filename1.txt .. filename99.txt(99是文件中的#行)

注意 - 如果出现问题,将无法正确输出以开头的源行: