1

我有“input.txt”,我想搜索一个字符串并在引号之间提取一个字符串,我的 input.txt 只有 2 行:

name=' james carter'  nationality = ' usa '  age=32
name='fabio    rossi'  nationality = ' italia - milano '  age=19

我希望批处理从引号中提取名称(带空格)并将它们放入变量中(在这种情况下只需要两个变量)。例如我想设置两个变量:

name= james carter
name=fabio    rossi

所以我可以批量使用这些变量来做一些未来的操作。

附言。如有必要,可以使用 sed

编辑

这似乎是不可能的,所以我想知道是否可以只使用保留引号的字符串,就像这样

name1=' james carter'
name2='fabio    rossi'

所以现在的问题是,采取什么开始name='和结束'

4

2 回答 2

3

你可以试试这个:

@echo off
setlocal enabledelayedexpansion
set "INPUT_FILE=input.txt"
set "SED_CMD=sed "s/name='\(.[^^']*\)'.*/\1/""
set i=0
for /f "usebackq tokens=*" %%a in (`findstr "name=" %INPUT_FILE%`) do (
    set /a i+=1
    for /f "usebackq tokens=*" %%v in (`echo %%a ^| %SED_CMD%`) do (
        echo %%v
    )
)

然后,您将使用所需的值枚举变量 ( name1, name2) 等。
请注意,这适用于具有指定形式(ie name='something' blah blah)的任何行。

编辑:修改代码以丢弃不包含字符串的行name=

于 2012-06-21T14:53:46.923 回答
2

如果感兴趣的每一行的格式始终相同,以 开头name=',那么本机批处理解决方案很简单:

@echo off
setlocal
set input="test.txt"
for /f "tokens=1,3 delims=:'" %%A in (
  'findstr /b /c:"name='" %input% ^| findstr /n "^"'
) do set "name%%A=%%B"

此解决方案假定名称值从不包含该:字符。

于 2012-06-21T16:57:52.390 回答