(已编辑)如何从文本文件中读取数据并将其中的某些部分分配给变量?例如,在下面的行中,我想将数据分配给指定的变量,但忽略标题行,前言词" DATA:"和任何引号。
HEADER (ignore)
DATA: "set text inside quotes to VAR1"
DATA: "set text inside quotes to VAR2"
DATA (etc.)
我使用的代码是:
setlocal enabledelayedexpansion
set COUNT=0
for /f "usebackq delims=" %%a in ("data.txt") do (
set "INPUT=%%a"
set /a COUNT=!COUNT!+1
echo !INPUT! | findstr /i /c:"HEADER" > nul
if errorlevel 1 (
set "INPUT=!INPUT:DATA:=!"
set "INPUT=!INPUT:"=!"
set VAR!COUNT!=!INPUT!
echo Variable !COUNT! = !VAR!!COUNT!
)
)
我的预期输出是
Variable 1 = set text inside quotes to VAR1
Variable 2 = set text inside quotes to VAR2
但我得到的是
Variable 2 = 2
Variable 3 = 3
Variable 4 = 4
我做错了什么?
答案 0 :(得分:2)
我拿了你的代码并修好了。 特别是:
findstr
以查找与HEADER
可能需要进行一些小调整才能完全按照您的意愿进行调整,但我想我已经给了您一个有用的工作大纲。
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /f "tokens=*" %%a in ('findstr /i /v HEADER data.txt') do (
set "INPUT=%%a"
set /A COUNT=!COUNT!+1
set "INPUT=!INPUT:DATA:=!"
set VAR[!COUNT!]=!INPUT!
call echo Variable !COUNT! = %%VAR[!COUNT!]%%
)
<强>输出强>:
Variable 1 = "set text inside quotes to VAR1"
Variable 2 = "set text inside quotes to VAR2"
Variable 3 = DATA (etc.)
<小时/> 要匹配具有前导空格的行,请使用开关:
findstr /V /R /C:"^ *HEADER"
正则表达式意味着:
^ : Beginning of line
[space] : a literal space
* : the previous character (space) repeated as many times as needed
HEADER : the text to find after leading spaces
开关意味着:
/R
使用正则表达式/C:
使用此搜索字符串/V
显示与此表达式不匹配的所有行。