我有一个XML文件Testing.Config
,其中包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
<add name="name1" connectionString="user id=id1;password=password1;"/>
<add name="name2" connectionString="user id=id2;password=password2;"/>
<add name="name3" connectionString="user id=id3;password=password3;"/>
</connectionStrings>
我需要解析此文件并获取由提供的属性标识的特定标记的属性中的id
和password
键值对,例如"name=name1"
。
输入:
name=name1
返回:
id=id1
password=password1
@echo off
set "xml_file=test.xml"
set /p search_for=Enter name:
for /f "skip=2 tokens=3,9 delims=;= " %%a in ('find """%search_for%""" "%xml_file%"') do (
set "name=%%~a"
set "pass=%%b"
)
echo name : %name%
echo pass : %pass%
如果所有connectionStrings都在分隔的行上,并且每个字符串都在一行上。更改xml_file
的位置
您还可以尝试使用xpath.bat(根据我的更好选项)-small脚本,它允许您通过xpath表达式获取xml值,而无需使用外部二进制文件:
call xpath.bat connection.xml "//add[@name = 'name1']/@connectionString"
既然你指出(在问题的评论中)powershell也没关系,请将以下代码放在脚本文件中(比方说Foo.ps1
)
param
(
[Parameter(Mandatory=$true)]
[string] $ConfigFilePath,
[Parameter(Mandatory=$true)]
[string] $Name
)
([xml](Get-Content -LiteralPath $ConfigFilePath)).connectionStrings.add |
Where-Object {$_.name -eq $name} |
ForEach-Object {($_.connectionString -split ' ')[1] -split ';'}
然后使用参数运行脚本以获取输出。