【问题标题】:How do I set a variable to equal every line in a txt file with for/f?如何使用 for/f 将变量设置为等于 txt 文件中的每一行?
【发布时间】:2023-03-23 03:20:01
【问题描述】:

我有一个 ChatRoom 批处理文件,它会创建一个文本文件,所有用户输入都像这样: Echo %用户输入% >> C:\ChatterBox\Chat.txt

到目前为止我有这个:

For /F "Delims=" %%A In (C:\ChatterBox\Chat.txt) Do (
Set Chat=%%A
)
Echo %Chat%

这不起作用,它只给了我文本文件的第一行,你知道我如何以这种方式回显每一行吗?

回显 %Chat%

输出看起来像这样吗?

"Line one"
"Line two"
"Line three"
"Line four"

【问题讨论】:

  • 您需要使用变量还是只想显示它?单个变量有 8K 字节限制。

标签: string batch-file for-loop


【解决方案1】:

您在循环结束后回显该行,因此您只会打印 last 行(不是第一行)。为了使用循环中的行,您必须启用延迟变量扩展 - 否则变量会在循环开始时而不是每次迭代时扩展。启用后,您可以使用!var! 而不是%var% 来获得延迟扩展。

这是怎么做的:

setlocal enabledelayedexpansion
For /F "Delims=" %%A In (Chat.txt) Do (
Set Chat=%%A
Echo !Chat!
)

【讨论】:

  • 这并不能解决将文件内容设置为一个变量的愿望。
  • @Monacraft:完全不清楚 OP 希望变量包含文件的全部内容。我很确定他们只想一次分配一行。
  • 谢谢,我认为 type 命令对我的目的来说已经足够好了。 @foxidrive
【解决方案2】:

使用这个命令:

for /f "delims=" %%i in (chat.txt) do echo %%i

这将显示chat.txt 文件中的所有行

希望对你有帮助!

【讨论】:

  • 这并不能解决将文件内容设置为一个变量的愿望。
【解决方案3】:

您还可以将所有行放在一个可以在循环外使用的变量中:

set Chat=
set NL=^

::The above two blank lines are needed
setlocal enabledelayedexpansion
for /f "delims=" %%a in (chat.txt) do (
    set Chat=!Chat!!NL!%%a
    )
Echo %Chat%

这应该对你有好处。重要的是要注意,不要费力地打印每一行,只需使用:type chat.txt

莫娜。

【讨论】:

  • 您的代码有错字,并且聊天变量没有引用 %%a
  • 哎呀,谢谢 - 现在已修复@foxidrive
【解决方案4】:

这将显示以下行:

type "C:\ChatterBox\Chat.txt"

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多