如何将文本文件的内容加载到batch filevariables中?

我需要能够加载一个文本文件的全部内容,并加载到一个variables进一步处理。

我怎样才能做到这一点?


罗马Odaisky的答案,这是我做的感谢。

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

使用,沿线的东西:

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

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

我知道的最好的批处理文件黑魔法参考是在http://www.rsdn.ru/article/winshell/batanyca.xml 如果你不知道俄罗斯,你仍然可以使用提供的代码片段。

如果您的set命令支持/ p开关,那么您可以通过这种方式管道输入。

 set /p VAR1=<test.txt 

设置/? |找到“/ P”

/ P开关允许您将变量的值设置为由用户输入的一行输入。 在读取输入行之前显示指定的promptString。 promptString可以是空的。

这为未注册的文件类型(接受的答案没有)提供了额外的好处。

您可以使用:

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

您可以通过阅读本页(简单阅读,简洁明了)直接或间接或稍后获益。

将文件数据导入环境变量(env var)

我能够用“方法4b”取得成功,这让我希望我最终能够成功与4a。

你可以定义进一步的处理?

你可以使用for循环来做到这一点,但是把CR / LF插入到环境变量中并不是一件容易的事情,所以你将所有东西放在一行中。 (你可能能够解决这个问题,取决于你需要做什么。)

你也被限制在少于8K的文本文件。 (你不能创建一个大于8K的单个env变量。)

比尔建议的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 

创建一个名为“SetFile.bat”的文件,其中包含以下行, 在其末尾没有回车符

 set FileContents= 

然后在你的批处理文件中做这样的事情…

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

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

 for /f "delims=" %%i in (count.txt) do set c=%%i echo %c% pause