如何将文本文件的内容加载到批处理文件变量中?

时间:2020-03-06 14:43:39  来源:igfitidea点击:

我需要能够加载文本文件的全部内容,并将其加载到变量中以进行进一步处理。

我怎样才能做到这一点?

感谢罗曼·奥戴斯基(Roman Odaisky)的回答,这就是我所做的。

SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i

echo %content%
EndLocal

解决方案

使用for,类似以下内容:

set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i

也许你需要做setlocal enabledelayedexpansion和/或者使用!content!而不是%content%。我无法测试,因为附近没有MS Windows(希望我们也一样:-)。

我知道的最好的批处理文件" black-magic-reference"位于http://www.rsdn.ru/article/winshell/batanyca.xml。如果我们不懂俄语,仍然可以使用提供的代码段。

创建一个名为" SetFile.bat"的文件,该文件包含以下行,且末尾没有回车符...

set FileContents=

然后在批处理文件中执行以下操作...

@echo off
   copy SetFile.bat + %1 $tmp$.bat > nul
   call $tmp$.bat
   del $tmp$.bat

%1是输入文件的名称,%FileContents%将在调用后包含输入文件的内容。不过,这仅适用于一行文件(即不包含回车符的文件)。如果需要,可以在调用%tmp%.bat之前从文件中删除/替换回车符。

我们可以定义进一步的处理吗?

我们可以使用for循环几乎做到这一点,但是没有简单的方法将CR / LF插入到环境变量中,因此将所有内容都放在一行中。 (根据我们需要执行的操作,我们也许可以解决此问题。)

这样,文本文件也被限制在少于8k。 (我们不能创建单个大于8k的环境变量。)

Bill提出的for循环建议可能就是我们所需要的。我们一次只处理一行文件:

(在批处理文件中的命令行" %% i"处使用"%i")

for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i

更先进:

for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin

:part2
echo %1
::do further processing here
goto :eof

:fin

我们可以使用:

set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i