【问题标题】:How to avoid batch line limit (8191 chars per line)?如何避免批处理行限制(每行 8191 个字符)?
【发布时间】:2012-11-11 01:05:47
【问题描述】:

我有一个多行文件(大约 300 - 400 行),每行有 72 个字符,我需要将其转换为一行。

有什么想法吗?

【问题讨论】:

  • 我不认为这真的是重复的。该链接试图执行一个长行,而这个问题试图将多个文本行连接成一个长文本行,大概在输出文件中。
  • 重写 cmd.exe 让它可以做到这一点... :-)

标签: windows scripting batch-file


【解决方案1】:

这是可能的,假设您希望将连接的行放在文本文件的一行中。但是,即使您可以使用批处理创建长行,您也无法使用批处理读取该行。正如 Electro Hacker 所说,您不能创建长度超过 8191 字节的批处理环境变量。

XP SET /P 将保留每行的前导空格。但是 SET /P 在 Vista 及更高版本上会去除前导空格。

此解决方案在每个连接的行之间添加一个空格。

@echo off
setlocal
set "infile=test.txt"
set "outfile=out.txt"

>"%outfile%" (
  for /f usebackq^ delims^=^ eol^= %%A in ("%infile%") do <nul set /p "=%%A "
)

【讨论】:

    【解决方案2】:

    如果您想坚持使用标准 Windows 工具,PowerShell 也是一种选择:

    -join (Get-Content foo.txt)
    

    【讨论】:

    • +1 VBScript 或 JScript 解决方案也将是微不足道的,虽然不是那么优雅 :-) 脚本宿主的优点是它是 XP 的标准,不像 PowerShell。
    【解决方案3】:

    你不能打破操作系统的限制,你不能打破 Windows 中的 255 个字符路径,你不能打破 CMD 解释器的长度限制,就这么简单!

    抱歉,您不能将那行存储到 var 中,没办法,不存在任何魔法,计算机是合乎逻辑的。

    但这不是世界末日,你可以在任何其他语言中轻松做到这一点,我推荐你使用 Ruby 或 python (Ruby),这是一项简单的工作,打开一个文件,将内容存储到一个 var ,然后做你想做的事,不需要任何经验,如果你需要一个例子,只需评论这个。

    【讨论】:

    • 确实不能创建超过 8191 字节的变量,也不能读取超过 8191 字节的行。但是您可以在输出文件中创建超过 8191 字节的行 - 请参阅 my answer
    • 嗯,cmd 的限制几乎不是操作系统限制。并且路径中可以有多个 MAX_PATH 个字符。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多