Batch file 自动拆分多个文本文件
我有大约3000个txt文件,我想根据特定短语将每个文件分成两个单独的txt文件,例如第一节和第二节 每个文件如下所示: 第一节 Xxxxxxxxx XXXXXXXXX Xxxxxxxxx 第二节 XXXXXXXXC Xxxxccxccc XXXXXXXXCXX 我想把第一节和第二节放在两个单独的txt文件中 请建议或建议我帮助执行此任务。我听说过批处理文件,但我不知道它是如何工作的 我用的是Windows10Batch file 自动拆分多个文本文件,batch-file,windows-10,Batch File,Windows 10,我有大约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的参数
- 如果第一个单词是
Sub:SetFout被调用,通过在Fin(在文件中)后面附加第二个单词(一,二),从Fin(在文件中)生成一个新名称Fout,新文件被设置为NULSection
- 所有其他行仅复制到当前Fout
,并查找tr“Xxxxxxxxx”“%%a”>“section1.txt”
。对于第2节,您可以再次执行类似的操作。如果没有,请在尝试后返回一个更详细的问题。批处理是否也会递归分割新文件?请不要这样想,在进入for
块之前,将对for
循环中的'dir/B*.txt'
命令进行评估。但是如果执行两次,实际上for
命令将找到新文件。