我有一个批处理文件,它使用类似这样的代码从远程文本文件中获取变量-
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%%L
For /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%%L
For /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