自动拆分许多文本文件

时间:2016-12-09 00:53:56

标签: batch-file windows-10

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

每个文件都是这样的:

第一节

XXXXXXXXX XXXXXXXXXX XXXXXXXXX

第二节

Xxxxxxxxxc Xxxxccxccc Xxxxxxxcxx

我希望将第一部分和第二部分放在两个单独的txt文件中。

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

我正在使用Windows 10.

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

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

尽管如此,试一试。它可能需要修改涉及处理paths或任何您真正的任务。尝试自己的努力然后回来展示你的进展,你在哪里被困,并且可能找到解决方案。

此脚本将txt文件拆分为section two,并将扩展名从blabla.txt更改为blabla.one.txtblabla.two.txt,其中每个文件都包含原始文件的拆分版本。< / p>

字符串Section ...应该位于该行的开头。

@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

答案 1 :(得分:0)

编辑我的批处理工作是为了获取所有文件并绕过递归已经拆分文件

@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§³$表示不包含这些字符的每一行,ergo all。
  • for / f解析数字的行和剪切以及数字的剩余部分 line是调用的arg:sub
  • 如果第一个单词是Section Sub:调用SetFout从Fin(在文件中)中建立一个新名称Fout,方法是将_secondWord附加到它(一,二)新文件设置为NUL
  • 所有其他行只是复制到当前的Fout