Batch file 使用批处理文件查找文本文件中的值
也许你们能帮我,伙计们,这就是我要做的 我有一个文本文件,大致如下所示: 别的 废话废话 名称:“价值”;参数2:“价值”;参数3:“价值” 名称:“价值”;参数3:“价值”;参数4:“价值”;参数5:“价值” 更多的是别的 我正在寻找以“Name:”字符串开头的行,在该行中,我会对其中一个“参数”的值感兴趣(每次运行时,它可能是不同的)。每一行可能有不同数量的参数,并且可能不包含我正在搜索的参数 例如,我要查找的参数是“Width:”,我需要所有具有该名称的行的值。我正在搜索的示例行可能如下所示 名称:“测试”;范围:“32”;颜色:“FFFFFF”;宽度:“11”;不透明度:“0.1” 我需要得到宽度值,它是11 到目前为止,我已经设法想出了这个:Batch file 使用批处理文件查找文本文件中的值,batch-file,command-line,Batch File,Command Line,也许你们能帮我,伙计们,这就是我要做的 我有一个文本文件,大致如下所示: 别的 废话废话 名称:“价值”;参数2:“价值”;参数3:“价值” 名称:“价值”;参数3:“价值”;参数4:“价值”;参数5:“价值” 更多的是别的 我正在寻找以“Name:”字符串开头的行,在该行中,我会对其中一个“参数”的值感兴趣(每次运行时,它可能是不同的)。每一行可能有不同数量的参数,并且可能不包含我正在搜索的参数 例如,我要查找的参数是“Width:”,我需要所有具有该名称的行的值。我正在搜索的示例行可能如下
for /f "delims=" %%a in ('FIND "Name: " %1') do (
echo %%a
)
这将查找文件中包含名称和值的每一行(正如前面提到的,此文件还包含一些我不需要的其他内容),并显然将其输出。现在,我不知道如何找到是否存在所需的参数以及如何获取其值。我正在考虑使用该行搜索参数(从示例中可以看到宽度:“,将其与前面的所有内容一起剪切,然后搜索双引号并将其与后面的所有内容一起剪切。这应该只会留下所需的值。我无法做到这一点,因此我在这里寻求帮助。使用FIND不能保证该行以
名称:
开头。”
FINDSTR原语正则表达式功能可以验证以名称开头的行:
,以及查找包含所需参数的行
变量search and replace!var:*search=replace!
可用于通过所需参数名称删除行首的所有文本
额外的FOR/F可用于解析剩余字符串的第一个标记
for /f "delims=" %%A in (
'findstr /rc:"^Name: .* Width: " %1'
) do (
set "ln=%%A"
setlocal enableDelayedExpansion
for /f "delims=; " %%B in ("!ln:* Width: =!") do (
endlocal
echo %%~B
)
)
有一个潜在的问题-如果较早的参数值中嵌入了所需的参数名称,则搜索和替换步骤可能会给出错误的结果
Name: "value"; Comment: "I want the Width: value"; Width: "11"; etc...
任何提供复杂正则表达式搜索和替换功能的实用程序都可以用来提供准确的答案。例如,sed For Windows是免费提供的,它可以完成这项工作 我已经写过了。这是一个纯脚本,从XP开始将在任何现代Windows机器上运行。脚本中嵌入了完整的文档 REPL.BAT可以一步提供您的答案:)只要内容符合您所展示的格式,它就应该始终有效
type %1 | repl "^Name: \q.*?\q;( [^:]+: \q.*?\q)* Width: \q(.*?)\q;.*" $2 ax
如果需要,可以很容易地修改正则表达式以支持令牌之间不同数量的空格。谢谢,这或多或少就是我想要的!