如何将文本文件的内容加载到批处理文件变量中?
时间: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