如何在批处理中读取文本文件的全部内容

8
我希望在批处理文件中读取文本文件的全部内容。 我找到了以下代码:

for /f "delims=" %%x in (file.txt) do set content=%%x

但是"content"变量只有最后一行,我想将整个文件读入单个变量。

只有文件大小小于8191字节才能正常运行,因为变量受此限制。 - jeb
3个回答

9

根据您的评论

有没有办法在!content!中包含行?

我猜您想在内容变量中使用换行符,这可以通过添加额外变量来实现。

@echo off
setlocal EnableDelayedExpansion
set LF=^


rem ** The two empty lines are necessary
set "content="

for /f "delims=" %%x in (file.txt) do (
  set "content=!content!%%x!LF!"
)
echo(!content!

endlocal

这对我来说什么也没有打印。我设置了正确的文件,并提供了文件内容。echo命令没有打印任何内容。 - Trevor Hickey
@TrevorHickey 你应该开一个新的问题并链接到这个问题。你已经用 ECHO ON 测试过了吗? - jeb

2

我不确定您在“content”变量中寻找的确切格式,但是这段代码应该可以解决问题(该代码简单地将内容设置为空白,然后循环遍历file.txt的每一行,并使用延迟扩展将该行复制到内容中):

@echo off
setlocal enabledelayedexpansion
set content=

for /f "delims=" %%x in (file.txt) do (set content=!content! %%x)
echo !content!

endlocal

2
但是你应该回显 !content! 而不是 %var% - jeb
1
但是你应该使用echo(!content!而不是echo %content%,否则可能会出现特殊字符、关键字如ON/?等问题。 - jeb
1
@jeb 我同意,但是只是为了澄清... echo %content% 这行代码仅仅是为了演示目的,以便说明代码将所有 file.txt 文件设置到 content 变量中。 - Jeff K
@Jeff 没问题,但是所有的文本都在一个单行中!content! 有没有办法将!content!中的文本分成多行? - Nabi

-2

在现代的 Windows 拷贝中,您也可以这样做:

powershell -Command cat "<file name>"

唯一需要注意的是:

powershell YourScriptFile.ps1

默认情况下,除非您修改系统安全设置,否则不会执行...就像我尝试构建“cat”命令时学到的那样。话虽如此,对于像这样的一两行代码,为什么要费力不讨好呢?在大多数现代系统上,您可以利用这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接