使用批处理在引号之间提取字符串

时间:2012-06-21 13:33:18

标签: batch-file

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

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

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

name= james carter
name=fabio    rossi

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

PS。如果有必要,可以使用sed

修改

这似乎是不可能的,所以我想知道是否可以采取字符串保持引用,像这样

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

所以现在的问题是,在name='之后开始并以'结束

2 个答案:

答案 0 :(得分: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
    )
)

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

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

答案 1 :(得分: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"

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