【问题标题】:To split text file into multiple files using windows batch使用 Windows 批处理将文本文件拆分为多个文件
【发布时间】:2014-09-14 01:01:58
【问题描述】:

这个批处理脚本的想法是分割一个包含由'//'分隔的信息行的文件,然后根据时间戳和一个特殊的关键字作为文件扩展名来命名文件。该文件还包含一个标题,在拆分文件之前需要先删除该标题。主文件示例:

  • 主标题 1
  • .....
  • .....
  • 主标题 8
  • DOC(子标题)
  • 1号线
  • 第2行
  • 3号线
  • 第4行
  • 第5行
  • //
  • TXT
  • 1号线
  • 第2行
  • 3号线
  • 第4行
  • 第5行
  • //
  • 文档
  • 1号线
  • 第2行
  • 3号线
  • 第4行
  • 第5行
  • //

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

  • 单个文件的示例。
  • TXT
  • 1号线
  • 2号线
  • 3号线
  • 第 4 行
  • 5号线

如果在主文件中没有找到关键字 TXT 或 DOC,则无需执行任何操作。

如果有人可以帮助我编写此脚本,我将不胜感激。

谢谢/问候

【问题讨论】:

  • 欢迎来到 StackOverflow。不幸的是,这个问题属于“请帮我做作业”的类别(即使它不是你的作业)。 StackOverflow 用于询问有关代码的问题。它不是为了请求提供代码。如果您对问题有意见并遇到问题,您应该来询问这些问题。请参阅“离题”第 3 项,此处:stackoverflow.com/help/on-topic

标签: windows batch-file scripting


【解决方案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 包含部分ID,因此输出到该文件。

您需要根据您的特定要求操作datestamp。轻松完成 - 只需查阅任意数量的关于批处理子字符串的 SO 文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2015-08-08
    • 2018-06-02
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多