循环通过文件保存到variables

我现在有下面的bat文件工作(它允许文本添加到文件的每一行的末尾) – 请参阅: bat文件:使用if,for和一个variables

@echo off setLocal EnableDelayedExpansion IF EXIST "%FileToModify1%" ( for /f "tokens=* delims= " %%a in (%FileToModify1%) do ( echo %%a Note: certain conditions apply >> "%SaveFile1%" ) ) 

但是,我想将每行保存到一个variables(包括新的行符号),然后在variables的末尾回显variables。 由于文件中有几行文件,每行保存到一个文件的效率并不高。

我试图用googlesearch,但答案不适合我的情况…

基本上我需要的语法连接和保存到一个variables(累积像在C#中的“+ =”),并使用新的行…

Solutions Collecting From Web of "循环通过文件保存到variables"

其实你不需要把所有东西都放到一个变量中,你只需要把重定向放在另一个位置。 尝试这个:

 @echo off setlocal EnableDelayedExpansion if exist "%FileToModify1%" ( for /F "usebackq delims=" %%a in ("%FileToModify1%") do ( echo %%a Note: certain conditions apply ) ) > "%SaveFile1%" endlocal 

请注意,原始文件中的空行被for /F忽略,因此它们不会被传输到新文件。 此外,行开始;for /F忽略(除非你改变eol选项 – 参见for /? )。

我修改了for /F选项:

  • 所以每一行都是原样输出的(带有"tokens=* delims= " ,如果有的话,前面的空格会从每行中删除)。
  • usebackq允许围绕在""的文件规范,如果它包含空格是有帮助的;

附录A

如果您仍想将文件内容存储到变量中,可以这样做:

 @echo off setlocal EnableDelayedExpansion rem the two empty lines after the following command are mandatory: set LF=^ if exist "%FileToModify1%" ( set "FileContent=" for /F "usebackq delims=" %%a in ("%FileToModify1%") do ( set "FileContent=!FileContent!%%a Note: certain conditions apply!LF!" ) (echo !FileContent!) > "%SaveFile1%" ) endlocal 

文件内容存储在变量FileContent ,包括附录Note: certain conditions applyLF拥有新的符号。

注意:
一个变量的长度是非常有限的(据我所知,自Windows XP和2047字节之前8191个字节)!

[参考文献:
将文件输出存储到变量 (最后的代码片段)中;
说明如何批处理新行变量黑客工作 ]


附录B

或者,您可以将文件内容存储在数组中,如下所示:

 @echo off setlocal EnableDelayedExpansion if exist "%FileToModify1%" ( set /A cnt=0 for /F "usebackq delims=" %%a in ("%FileToModify1%") do ( set /A cnt+=1 set "Line[!cnt!]=%%a Note: certain conditions apply" ) (for /L %%i in (1,1,!cnt!) do ( echo !Line[%%i]! )) > "%SaveFile1%" ) endlocal 

文件的每一行都存储在一个数组Line[1]Line[2]Line[3]等内,包括附录Note: certain conditions applycnt包含行数的总数,这是数组的大小。

注意:
实际上,这不是一个真正的数组类型,因为它不是批量存在的,它是一个数组样式命名( Line[1]Line[2] ,…))的标量变量集合。 因此可以称之为伪阵列。

[参考文献:
将文件输出存储到变量 (第一个代码段)中;
如何从批处理文件中的txt文件创建一个数组? ]

你可以写一个输出文件:

 ( for /l %%i in (0,1,10) do ( echo line %%i ) )>outfile.txt 

(比分别追加每行更快)