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

我该怎么做?


感谢Roman 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

设置/? | find&quot; / P&quot;

  

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

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

您可以使用:

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

你能定义进一步的处理吗?

你可以使用for循环来实现这一点,但是没有简单的方法将CR / LF插入到环境变量中,所以你将把所有东西都放在一行中。 (你可以根据自己的需要来解决这个问题。)

这种方式也限制在不到8k左右的文本文件中。 (你不能创建一个大于8k的单个env var。)

比尔建议的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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top