我希望在批处理文件中读取文本文件的全部内容。
我找到了以下代码:
但是"content"变量只有最后一行,我想将整个文件读入单个变量。for /f "delims=" %%x in (file.txt) do set content=%%x
但是"content"变量只有最后一行,我想将整个文件读入单个变量。for /f "delims=" %%x in (file.txt) do set content=%%x
根据您的评论
有没有办法在!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 ON
测试过了吗? - jeb我不确定您在“content”变量中寻找的确切格式,但是这段代码应该可以解决问题(该代码简单地将内容设置为空白,然后循环遍历file.txt的每一行,并使用延迟扩展将该行复制到内容中):
@echo off
setlocal enabledelayedexpansion
set content=
for /f "delims=" %%x in (file.txt) do (set content=!content! %%x)
echo !content!
endlocal
!content!
而不是 %var%
。 - jebecho(!content!
而不是echo %content%
,否则可能会出现特殊字符、关键字如ON
或/?
等问题。 - jebecho %content%
这行代码仅仅是为了演示目的,以便说明代码将所有 file.txt 文件设置到 content
变量中。 - Jeff K在现代的 Windows 拷贝中,您也可以这样做:
powershell -Command cat "<file name>"
唯一需要注意的是:
powershell YourScriptFile.ps1
默认情况下,除非您修改系统安全设置,否则不会执行...就像我尝试构建“cat”命令时学到的那样。话虽如此,对于像这样的一两行代码,为什么要费力不讨好呢?在大多数现代系统上,您可以利用这一点。