我有“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='
之后开始并以'
结束
答案 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
)
)
然后,您将使用所需的值枚举变量(name1
,name2
)等。
请注意,这适用于具有指定格式的任何行(即。 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"
此解决方案假定名称值从不包含:
字符。