Batch file 自动拆分多个文本文件

Batch file 自动拆分多个文本文件,batch-file,windows-10,Batch File,Windows 10,我有大约3000个txt文件,我想根据特定短语将每个文件分成两个单独的txt文件,例如第一节和第二节 每个文件如下所示: 第一节 Xxxxxxxxx XXXXXXXXX Xxxxxxxxx 第二节 XXXXXXXXC Xxxxccxccc XXXXXXXXCXX 我想把第一节和第二节放在两个单独的txt文件中 请建议或建议我帮助执行此任务。我听说过批处理文件,但我不知道它是如何工作的 我用的是Windows10 非常感谢 我同意前面的评论。如果您想知道发生了什么,您应该自己努力阅读此处使用的命令

我有大约3000个txt文件,我想根据特定短语将每个文件分成两个单独的txt文件,例如第一节和第二节

每个文件如下所示:

第一节

Xxxxxxxxx XXXXXXXXX Xxxxxxxxx

第二节

XXXXXXXXC Xxxxccxccc XXXXXXXXCXX

我想把第一节和第二节放在两个单独的txt文件中

请建议或建议我帮助执行此任务。我听说过批处理文件,但我不知道它是如何工作的

我用的是Windows10


非常感谢

我同意前面的评论。如果您想知道发生了什么,您应该自己努力阅读此处使用的命令的帮助(即
for/?
findstr/?
,…)

尽管如此,尝试一下。它可能需要修改,包括处理
路径
或任何您真正的任务。尝试你自己的努力,然后回来展示你的进步,你被困在哪里,可能会找到解决办法

此脚本在找到
第二节
的位置拆分txt文件,并将扩展名从
blablabla.txt
更改为
blablabla.one.txt
blablablabla.two.txt
每个文件都包含原始文件的拆分版本

字符串
部分…
应该位于行的开头

@echo off
for /F %%f in ('dir /B *.txt') do (
   for /F "usebackq tokens=1-3 delims=: " %%1 in (`findstr /B /N "Section" "%%f"`) do (
     if /I "%%3" EQU "two" call :split %%f, %%1
   )
)
exit/B

:split
Setlocal

set "fileone=%~1" & set "filetwo=%~1" & set/a split=%2

set "fileone=%fileone:.=.one.%" 
set "filetwo=%filetwo:.=.two.%"

copy NUL "%fileone%">NUL
copy NUL "%filetwo%">NUL

for /F "tokens=1,* delims=[]" %%a in ('"type "%~1"|find /N /V """') do (
  if %%a lss %split% ( 
    echo(%%b>>"%fileone%"
  ) else ( 
    echo(%%b>>"%filetwo%" 
  )
)

Endlocal
exit/B

EDIT对我的批处理进行了返工,以获取所有文件并避免递归已拆分的文件

@Echo off
For /f "Delims=" %%F in ('Dir /B/S File*.txt^|Findstr /v "_"'
) Do Set "Fout=NUL"&Set "Fin=%%~F"&For /f "Tokens=1*Delims=:" %%A in (
'Findstr /N /V §³$ %%F') Do Call:Sub %%B
Goto :Eof

:Sub
If %1. Equ Section. Call :SetFout %Fin% %2
>>"%Fout%" Echo:%*
Goto :Eof

:SetFout
Set "Fout=%~dpn1_%2%~x1"
Type NUL>"%Fout%"
一些解释

  • findstr/N用于对行进行编号(必需,否则为空 线路将被删除)
  • /V§³$是指不包含这些字符的每一行,因此全部
  • for/f解析数字的行和切割以及 line是call:sub的参数
  • 如果第一个单词是
    Section
    Sub:SetFout被调用,通过在Fin(在文件中)后面附加第二个单词(一,二),从Fin(在文件中)生成一个新名称Fout,新文件被设置为NUL
  • 所有其他行仅复制到当前Fout

此任务适用于所有常见脚本版本。但脚本编写服务也不例外。你应该自己表现出一些努力。用谷歌搜索解决方案并不难。在下一节中,您需要迭代遍历文件夹,逐行读取文件切换输出。我使用vbscript/powershell使用多行正则表达式还有其他方法。如果您可以区分第一节和第二节,我将在(*.txt)中为%%a使用
,并查找tr“Xxxxxxxxx”“%%a”>“section1.txt”
。对于第2节,您可以再次执行类似的操作。如果没有,请在尝试后返回一个更详细的问题。批处理是否也会递归分割新文件?请不要这样想,在进入
for
块之前,将对
for
循环中的
'dir/B*.txt'
命令进行评估。但是如果执行两次,实际上
for
命令将找到新文件。