如何将文件中的特定行放入批处理变量中?

如何将文件中的特定行放入批处理变量中?

我有一个批处理文件,它使用类似这样的代码从远程文本文件中获取变量-

set /p var=< examplepath\example.txt

但问题是它只会将第一行复制到变量中。因此我需要为每个变量使用一个文件。如何从一个文件中获取所有数据,而变量的数据来自不同的行?

例如我有这个文件example.txt

  • 数据1
  • 数据2
  • 数据3

我想要set /p设置函数变量1=数据1变量2=数据2变量3=数据3

我们如何做到这一点?

答案1

@echo off 

cd /d "%~dp0" 
setlocal enabledelayedexpansion 

For /F tokens^=* %%i in ('type "example.txt"
')do set /a "_cnt+=1+0" && call set "_var!_cnt!=%%~i"

For /L %%L in (1 1 !_cnt!)do For /F tokens^=*usebackq %%i in (
`echo[!_var%%~L!`)do if not defined _var_ (set "_var_=_var%%L=!_var%%~L!"
     ) else set "_var_=!_var_!, _var%%~L=!_var%%~L!"
     
echo\!_var_!>example2.txt && set /p _var=<example2.txt

echo\!_var! && for /L %%L in (1 1 !_cnt!)do echo\!_var%%~L!

endlocal && goto :EOF 
  • 输出:
_var1=data1, _var2=data2, _var3=data3         // -  From  echo\!_var!
data1                                         // |
data2                                         // |  From  For /L loop
data3                                         // |

1.在循环内实现一个计数器,For /F逐行读取文件中的数据:

For /F tokens^=* %%i in ('type "example.txt"
')do set /a "_cnt+=1+0" && ... 

2.每一行将单独保存在变量 _var + counter 中

... && call set "_var!_cnt!=%%~i"

3.实现一个For /L从 1 开始并递增到计数器中定义的值的循环 ==! _cnt!

For /L %%L in (1 1 !_cnt!)do ...

4.连接字符串_var使用循环中的变量%%L,以便恢复保存的每一行的值_var%%LFor /F在附加循环中使用它

... do For /F tokens^=*usebackq %%i in (
`echo[!_var%%~L!`)do

5.使用条件if,其中_var_变量已经定义,定义它以便在变量中添加更多字符串,或者仅使用第一行的值定义它(var%%L == var1 == data1

... do if not defined _var_ (set "_var_=_var%%L=!_var%%~L!"
     ) else set "_var_=!_var_!, _var%%~L=!_var%%~L!"

6.如果由于某种原因您需要此由定义的变量set /p,则将变量_var重定向到另一个文件,然后使用它

echo\!_var_!>example2.txt && set /p _var=!<example2.txt

观察:1记住项目4.:连接字符串_var使用循环中的变量%%L,以便恢复保存的每一行的值_var%%LFor /F在附加循环中使用它

echo\!_var! && for /L %%L in (1 1 !_cnt!)do echo\!_var%%~L!

观测者:2变量_var__var,保存了相同的内容/字符串/行

echo\!_var! 
echo\!_var_!


答案2

3行.txt

apple
bear
cat

测试脚本

@echo off
setlocal enabledelayedexpansion
set line=1
for /f "delims=" %%L in (3lines.txt) do (
    if "!line!"=="1" set var1=%%L
    if "!line!"=="2" set var2=%%L
    if "!line!"=="3" set var3=%%L
    set /a line+=1
    )

echo var1=%var1%
echo var2=%var2%
echo var3=%var3%

输出:

var1=apple
var2=bear
var3=cat

答案3

如果将变量名称放在文本文件中,则可以在一行中完成读取

3行-2.txt

var1=Andy
var2=Bob
var3=Chris

测试2

@echo off
for /f "delims=" %%L in (3lines-2.txt) do set %%L
echo var1=%var1%
echo var2=%var2%
echo var3=%var3%

输出

var1=Andy
var2=Bob
var3=Chris

相关内容