【问题标题】: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 文章。