如何在Batch/CMD中读取多行文本文件内容到变量中
如何在Windows批处理中将多行文本文件内容存入变量
批处理中set /p只能读取文件第一行,type命令无法直接将输出赋值给变量,以下是两种可行的解决方法:
方法一:启用延迟扩展的循环拼接
通过for /f逐行读取文件内容,结合延迟扩展实现多行内容的拼接:
@echo off setlocal enabledelayedexpansion :: 定义换行符(注意:^后需跟一个空行) set "newline=^ " set "message=" for /f "delims=" %%a in (message.txt) do ( if defined message ( set "message=!message!!newline!%%a" ) else ( set "message=%%a" ) ) :: 输出验证变量内容 echo !message! endlocal
enabledelayedexpansion:允许在循环内部实时更新变量值delims=:避免读取时截断包含空格的行- 定义的
newline变量用于保留原文件的换行格式
方法二:借助PowerShell读取(更稳定)
利用PowerShell的Get-Content命令直接读取全部内容,再传递给批处理变量:
@echo off for /f "delims=" %%a in ('powershell -command "(Get-Content message.txt -Raw).Replace('`n', '`r`n')"') do set "message=%%a" :: 输出验证变量内容 echo %message%
Get-Content -Raw:一次性读取文件所有内容为单个字符串Replace('n', 'rn')`:将Unix换行符转换为Windows标准的CRLF格式- 此方法对包含特殊字符(如&、|等)的文件兼容性更好
内容的提问来源于stack exchange,提问作者Kirubel Demelash
相关产品推荐
相关产品推荐

