如何逐行读取批处理文件中多余字符的文本文件?允许限制行长。(Windows,批处理脚本)

乔伊·乔
##test.txt##
First line = 1;*|:12345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345
Second line = 5;*|:3215432;*|:21543215432154321543215432154321543215432154321543215432154321543215;*|:543215;*|:5432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321

SetLocal EnableDelayedexpansion
for /F "tokens=* delims=" %%a in ('type "test.txt"') do (
            set "Line=%%a"
            echo Line: "!Line!"
)

显然,以上代码无法读取test.txt中的2行,因为每一行都超出了限制(8191个字符)。

通过键入

type "test.txt"

仍然导致test.txt文件中的两行。但是,一旦有2行进入for循环,就无法读取这些行。

我不需要整个行长,因此我尝试通过删除字符串的多余部分来预处理文本文件。例如,在上面的示例中,将行长度限制为8100。

1.如何在Windows环境中不使用记事本(任何GUI编辑器)的情况下编辑上述文本文件?

2.如果我不需要预处理文件,避免上述问题的诀窍是什么?

  • 甚至我也不能放胡萝卜(^),这会扩展命令范围。我想要的是拆分字符串并采用第一部分的方法,但是我不想通过记事本或其他GUI文件编辑器手动进行操作。
吉布

您可以使用块读取器,它将每一行拆分为最大大小为1023个字符的块。

@echo off
setlocal EnableDelayedExpansion

set pos=0
set line=
<long_text.txt (
    FOR /F "tokens=1 delims=:" %%1 in ('findstr /o "^" long_text.txt') DO (
        set new_pos=%%1
        set /a size=new_pos-pos
        set /a "chunks=(size-1+1022) / 1023"
        if defined line echo Line: !line! chunks=!chunks!

        set /a pos=new_pos
        for /L %%# in (1 1 !chunks!) do (
            set "partial="
            set /p partial=     
            if defined partial (
                echo   #!line! chunk %%# -- !partial:~0,10! ... !partial:~-10! 
            )
        )
        set /a line+=1
    )
)

这个怎么运作

外环FOR /F .. findstr /O用于通过计算两条线之间的位置差来确定每条线的长度。行长
用于计算要读取整行必须读取多少

一行本身被读取set /p(从的重定向读取<long_text.txt)。set /p内置限制为1023个字符。

因此set /p使用时间。

要计算单行使用多少块,必须将行长度除以1023,但必须减去1个字符,因为LF不计数(而是CR)。+1022是事实的结果,最后一个完整之后的其余字符也必须被读取。
如果该行是1023的倍数(也是一个空行),则最后一个块可以为空。

唯一剩下的一点是最后一行。
此技术不会读取最后一行,但是在前面添加一个空行很容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从批处理文件的文本文件中的行中删除多余的逗号?

如何按照使用 Windows 批处理脚本显示的顺序从文本文件中读取行?

批处理文件以从文本文件读取行

如何在Windows批处理文件中嵌入文本文件

如何使用Windows批处理文件解析包含本地变量的文本文件中的字符串?

如何从批处理脚本中单个变量的文本文件中读取所有内容?

如何使用批处理脚本跳过注释行以从文本文件中读取

批处理文件如何并行读取两个文本文件?

从文本文件读取值以在批处理文件变量中设置

如何使用Windows批处理文件从文本文件中的文件列表中递归复制文件?

批处理文件脚本以在计数大于 > 时删除文本文件中的行

使用 Windows 批处理文件删除/替换文本文件字符串

如何使用批处理文件有选择地删除文本文件中的文本?

批处理文件:合并文本文件中的同名文本文件

如何使用Windows批处理文件拆分文本文件元素?

如何将放入文本文件中的变量从批处理调用为批处理文件?

如何通过批处理文件从文本文件中删除不需要的行?

如何在批处理文件中打印多个文本文件

如何使用Windows批处理文件循环浏览文本文件中的每一行?

使用批处理文件编辑文本文件

批处理文件读取文本文件并尝试根据读取值停止进程

批处理文件以逐行解析文本文件,然后检查该行是否存在于其他文本文件中

在批处理脚本中从文本文件读取变量值

如何创建一个批处理文件,该批处理文件将删除文本文件中的行

使用文本文件重命名文件夹中的批处理文件

在文本文件上查找字符串-批处理文件

从文本文件复制文件的批处理脚本

使用 Windows 批处理脚本从文本文件中删除前几行

在批处理文件中包括文本文件(例如php include但带有批处理)