回复 3# aducyl - <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- # modify xml attributes
- # 替换内容,格式必须遵守下面样本,不要前加 Note
- $hashAttr = @{
- 'Bar="5" Pos="0"' = 'Bar="5" Pos="0"'
- 'Bar="5" Pos="2"' = 'Bar="5" Pos="2"'
- 'Bar="5" Pos="4"' = 'Bar="5" Pos="6"'
- 'Bar="5" Pos="6"' = 'Bar="5" Pos="8"'
- 'Bar="5" Pos="8"' = 'Bar="5" Pos="12"'
- 'Bar="5" Pos="10"' = 'Bar="5" Pos="14"'
- 'Bar="5" Pos="12"' = 'Bar="5" Pos="18"'
- 'Bar="5" Pos="14"' = 'Bar="5" Pos="20"'
- 'Bar="5" Pos="16"' = 'Bar="5" Pos="24"'
- 'Bar="5" Pos="18"' = 'Bar="5" Pos="26"'
- 'Bar="5" Pos="20"' = 'Bar="5" Pos="30"'
- 'Bar="5" Pos="22"' = 'Bar="5" Pos="32"'
- 'Bar="5" Pos="24"' = 'Bar="5" Pos="36"'
- 'Bar="5" Pos="26"' = 'Bar="5" Pos="38"'
- 'Bar="5" Pos="28"' = 'Bar="5" Pos="42"'
- 'Bar="5" Pos="30"' = 'Bar="5" Pos="44"'
- 'Bar="5" Pos="32"' = 'Bar="5" Pos="48"'
- 'Bar="5" Pos="34"' = 'Bar="5" Pos="50"'
- 'Bar="5" Pos="36"' = 'Bar="5" Pos="54"'
- 'Bar="5" Pos="38"' = 'Bar="5" Pos="56"'
- 'Bar="5" Pos="40"' = 'Bar="5" Pos="60"'
- 'Bar="5" Pos="42"' = 'Bar="5" Pos="62"'
- 'Bar="5" Pos="44"' = 'Bar="6" Pos="2"'
- 'Bar="5" Pos="46"' = 'Bar="6" Pos="4"'
- 'Bar="5" Pos="48"' = 'Bar="6" Pos="8"'
- 'Bar="5" Pos="50"' = 'Bar="6" Pos="10"'
- 'Bar="5" Pos="52"' = 'Bar="6" Pos="14"'
- 'Bar="5" Pos="54"' = 'Bar="6" Pos="16"'
- 'Bar="5" Pos="56"' = 'Bar="6" Pos="20"'
- 'Bar="5" Pos="58"' = 'Bar="6" Pos="22"'
- 'Bar="5" Pos="60"' = 'Bar="6" Pos="26"'
- 'Bar="5" Pos="62"' = 'Bar="6" Pos="28"'
- 'Bar="6" Pos="0"' = 'Bar="6" Pos="32"'
- 'EndBar="5" EndPos="0"' = 'EndBar="5" EndPos="0"'
- 'EndBar="5" EndPos="2"' = 'EndBar="5" EndPos="2"'
- 'EndBar="5" EndPos="4"' = 'EndBar="5" EndPos="6"'
- 'EndBar="5" EndPos="6"' = 'EndBar="5" EndPos="8"'
- 'EndBar="5" EndPos="8"' = 'EndBar="5" EndPos="12"'
- 'EndBar="5" EndPos="10"' = 'EndBar="5" EndPos="14"'
- 'EndBar="5" EndPos="12"' = 'EndBar="5" EndPos="18"'
- 'EndBar="5" EndPos="14"' = 'EndBar="5" EndPos="20"'
-
- }
- $xmlfile = "1.xml"
- $xmlfilenew = "1_new.xml"
-
- $hashValue = @{ }
- $hashModified = @{ }
- $re = [regex]'(\w+)="([^"]*)"'
- $xmldoc = New-Object -TypeName System.Xml.XmlDocument
- try {
- $xmldoc.Load($xmlfile)
- foreach ($strKey in $hashAttr.Keys) {
- $strXPath = $strKey -replace '\w+=', '@$&' -replace ' @', ' and @'
- $strValue = $hashAttr.Item($strKey)
- $hashValue.Clear()
- foreach ($reMatch in $re.Matches($strValue)) {
- $hashValue.Add($reMatch.Groups[1].Value, $reMatch.Groups[2].Value)
- }
- if (!$hashModified.ContainsKey($strValue)) {
- [void]$hashModified.Add($strValue, (New-Object System.Collections.ArrayList))
- }
- if (!$hashModified.ContainsKey($strKey)) {
- [void]$hashModified.Add($strKey, (New-Object System.Collections.ArrayList))
- }
- $alDst = $hashModified.Item($strValue)
- $alSrc = $hashModified.Item($strKey)
- foreach ($node in $xmldoc.DocumentElement.SelectNodes(".//Note[$strXPath]")) {
- if (!$alSrc.Contains($node)) {
- foreach ($dicEntry in $hashValue.GetEnumerator()) {
- $node.SetAttribute($dicEntry.Key, $dicEntry.Value)
- }
- [void]$alDst.Add($node)
- }
- }
- }
- $xmldoc.Save($xmlfilenew)
- } catch {
- $_ | Out-String | Write-Host -ForegroundColor Red
- }
复制代码
|