【问题标题】:Create String from all the lines in a file and store in variable [duplicate]从文件中的所有行创建字符串并存储在变量中[重复]
【发布时间】:2019-07-06 09:40:50
【问题描述】:

我目前遇到问题。这个似乎涵盖得很好,但我找到的所有答案都没有为我工作。我想做的就是这个。我有一个多行的文本文件。我想将所有这些连接到一个字符串,如

[LINE1]\n[LINE2]\n[LINE3]...

现在我找到的循环遍历文件行的答案很容易理解

for /F "delims=" %%i in (filename.key) do set content=%content% %%i

现在的问题是,我的批处理文件确实在文件中循环,但 %content% 在每个循环中似乎都是空的。所以毕竟完成后内容只匹配我文件的最后一行。我做错了什么?

【问题讨论】:

  • Batch 根本不支持多行字符串。您可以连接到单行字符串(即使有嵌入的 CR 但没有 LF)。
  • @LotPings 这正是我想要做的 ;)
  • 示例行中的 \n 具有误导性,它没有特殊含义 - 只是文本。

标签: windows loops batch-file


【解决方案1】:

您需要修改您的代码以将delayed expansion 添加到其中:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%A in (filename.key) do set "content=!content! %%A"
rem Your other code here....:

但我会这样做:

@echo off
SETLOCAL EnableDelayedExpansion

set "content="

for /F "delims=" %%A in (./config/git/read.key) do (
    if defined content (
        set "content=!content!\n%%A"
    ) else (
        set "content=%%A"
    )
)

echo %content%

rem Your other code here....:

你可以选择你想要的方式。

【讨论】:

  • 您可能应该解释一下批处理文件中一行的长度限制。一旦SET 命令达到 8192 字节,它将截断数据。
  • 谢谢。这几乎行得通。唯一的事情是它通过逗号来设置内容,即使使用 else 语句,我也会在字符串的开头得到那个分隔符。 edit 哦,最后一行我得到了两次[/edit]
  • @relief.melone 如果这可行,那么您可以接受它。你能重复一下你之前说的话吗?我不明白,对不起:(。
  • 好吧,我一定是打错了。 for /f "delims=\n" %%i in (./config/git/read.key) do if defined content (set "content=!content!\n%%i") else (set content=%% i) 有效。将在答案中对其进行编辑并接受
  • FOR 变量区分大小写。不能使用大小写字母来引用同一个标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2020-08-11
  • 2018-12-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2013-10-05
相关资源
最近更新 更多