使用Windows批处理将文本文件拆分为多个文件

时间:2014-09-14 01:01:58

标签: windows batch-file scripting

此批处理脚本的想法是拆分包含由' //'分隔的信息行的文件。然后根据时间戳命名文件,并将特殊关键字命名为文件扩展名。该文件还包含在拆分文件之前首先需要删除的标头。主文件样本:

  • 主标题1
  • .....
  • .....
  • 主标题8
  • DOC(子标题)
  • 第1行
  • Line2
  • Line3
  • Line4
  • Line5
  • //
  • TXT
  • 第1行
  • Line2
  • Line3
  • Line4
  • Line5
  • //
  • DOC
  • 第1行
  • Line2
  • Line3
  • Line4
  • Line5
  • //

基本上,批处理脚本会将主标题转换为' //'然后使用' //'作为分隔符,内容将被分解为单独的文件。并且每个文件将根据时间戳(yyyymmdd_hhmmss)和子标题> TXT'进行命名。和' DOC'作为文件扩展名。 例子20140914_001411.TXT或20140914.013326。

  • 单个文件的样本。
  • TXT
  • 线路1
  • 线路2
  • 行3
  • 线路4
  • 5号线

如果在主文件中找不到关键字TXT或DOC,则不需要采取任何措施。

真的很感激,如果有人可以帮助我使用这个脚本。

感谢/问候

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "destdir=U:\destdir"
SET "extensions=doc txt"
SET "datestamp=%date%_%time%"
FOR %%s IN (/ - " " . :) DO SET "datestamp=!datestamp:%%~s=!"

SET "output="
FOR %%a IN (%extensions%) DO DEL "%destdir%\%datestamp%.%%a" >NUL 2>nul
FOR /f "delims=" %%a IN (q25829175.txt) DO (
 IF "%%a"=="//" (SET "output=Y"&SET "ext="
 ) ELSE (
  IF DEFINED output (
   IF NOT DEFINED ext FOR %%s IN (%extensions%) DO IF /i "%%a"=="%%s" SET "ext=%%s"
   IF DEFINED ext (>>"%destdir%\%datestamp%.!ext!" ECHO(%%a) ELSE (SET "output=")
  )
 )
)

GOTO :EOF

您需要更改destdir的设置以适合您的具体情况。

我使用了一个名为q25829175.txt的文件,其中包含我的测试数据,但我删除了终止空格并在每个数据部分的每一行附加了一个字母,以便可以单独区分它们。

基本上,output标志已设置,并且每次遇到ext时都会清除//数据。如果我们输出(output设置),那么如果未设置ext,则必须是潜在部分的第一行,以便进行检查和建立。

如果ext仍然未设置,则此部分无关紧要,因此请清除输出标志,否则ext包含section-id输出到该文件。

您需要根据您的特定要求操纵datestamp。轻松完成 - 只需查阅批量子串的任何数量的SO文章。