用法见:https://www.runoob.com/dom/dom-tutorial.html复制代码
- Set objXmlDom = CreateObject("Microsoft.XMLDOM")
# 金额信息合计, 此处 freight 为平台运费 $info->{price} = $dom->at("td.product-price")->text =~ /([\d\.]+)/ ? $1 : 0; $info->{freight} = $dom->at("td.shipping-price")->text =~ /([\d\.]+)/ ? $1 : 0; $info->{adjust} = $dom->at("td.change-price")->text =~ /([\d\.]+)/ ? $1 : 0; $info->{discount} = $dom->at("td.discount-price")->text =~ /([\d\.]+)/ ? $1 : 0; $info->{amount} = $dom->at("td.order-price")->text =~ /([\d\.]+)/ ? $1 : 0; # 待定 $info->{escrowCom} = $dom->at("td.fee")->text =~ /([\d\.]+)/ ? $1 : 0; $info->{unionCom} = "-"; $info->{estimate} = $dom->at(".fund-bd td.amount")->text =~ /([\d\.]+)/ ? $1 : 0; |
复制代码
- var patt_ZDJY = /任务编号[\::]?\s*(ZD20\d{14}|ZD20\d{12}|LS\d{11}|)\s*[\|]?[\s\S]*请求服务[\::]?\s*((?!车架号)\S*|(?!车架号)\S[\s\S]*\S|)\s*车架号[\::]?\s*([\da-z]{17}|\**[\da-z]{6}|)\s*\S*[\s\S]*车牌号[\::]?\s*(\S*)\s*车主姓名[\::]?\s*(\S*)\s*车主电话[\::]?\s*(1\d{10}|)\s*(?:车辆品牌)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*车型[\::]?\s*((?!备注)\S*|(?!备注)\S[\s\S]*\S|)\s*(?:备注)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*请求地址[\::]?\s*([^\s\,,]+(?![,,,])|[^\s\,,][\s\S]*[^\s\,,]|)[,,\s]*位于[\::]?\s*\S*\s*地址补充[\::]?\s*(\S*|\S[\s\S]*\S)\s*目的地地址[\::]?\s*(\S*|\S[\s\S]*\S)\s*目的地补充[\::]?\s*(\S*|\S[\s\S]*\S)\s*服务商名称[\::]?\s*(\S*|\S[\s\S]*\S)\s*服务车辆[\::]?\s*(\S*)\s*服务人员工号[\::]?\s*(\S*)\s*服务人员电话[\::]?\s*(1\d{10}|)\s*[\s\S]*服务人员到达事发地[\::]?\s*(\S*|\S[\s\S]*\S)\s*实拖目的地[\::]?\s*((?!(?:故障类型|指定子机构))\S*|(?!(?:故障类型|指定子机构))\S[\s\S]*\S|)\s*(?:故障类型)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:故障类型确认)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:指定子机构)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*结算类型[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:服务状态)?[\::]?\s*(\S*|\S[\s\S]*\S)\s*(?:服务是否成功)?[\::]?\s*(\S*)\s*(?:服务评价)?/i;
我猜你很会写 PowerShell 脚本,贴一个完美版让大家都学习一下吧。
所谓的 bug 你多站在脚本编写者的角度看看,多数楼层的答案在需求不再变化的时候已经满足了要求,这算bug吗?
回复 7# WHY 写的太棒了
有个小问题可以处理下吗 就是其中有数组时共用同一个名称是要替换成同名称的 虽然也替换成同名了 单生成的XTX文本 可以被读取 但部分功能不在
说明 混编时还是有问题
复制代码
- @echo off
- PowerShell "$h=@{};$s=[regex]::Replace([IO.File]::ReadAllText('a.txt',[Text.Encoding]::Default),'(?<=\bname=\")[^^\"]+(?=\")',{param($m);$a=$m.Value;if(!$h.ContainsKey($a)){$x=[Math]::floor($global:n/26);if(!$x){$c=''}else{$c=[char](64+[int]$x)};$h[$a]=$c+[char](65+$global:n++%%26)};$h[$a]});$s=[regex]::Replace($s, '(?^<=\")[^\"@#]*[@#][^^\"]+(?=\")',{param($m);$a=$m.Value;forEach($k In $h.Keys){$a=$a.Replace('@'+$k,'@'+$h[$k]).Replace('#'+$k,'#'+$h[$k])};$a});sc b.txt -Value $s -Enc utf8"
- pause
还是那句话:能够解决问题的方法,不喜欢你可以不用,甚至不相信它,但不要轻易指责它。
拿不出完美的、比正则更好的解决方法,又极力指责“滥用正则”、“邪道”、“错误的技术”
xml 範例(來自網絡)复制代码
- $xmlfile = 'C:\Users\username\Documents\sample.xml'
- [XML]$xmlcontent = Get-Content $xmlfile
- function hash($string) {
- new-object System.Security.Cryptography.SHA256Managed | ForEach-Object { $_.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($string)) } | ForEach-Object { $all += $_.ToString("x2") }
- "varhead" + $all
- }
- $xmlcontent.SelectNodes("//*") | ForEach-Object {
- if (-not ($_.Type -eq $null)){
- $_.Type = hash($_.Type)
- } else {
- Write-Output "pass"
- }
- }
- $xmlcontent.Save(".\sample2.xml")
复制代码
- <?xml version="1.0"?>
- <PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
- <Address Type="Shipping">
- <Name>Ellen Adams</Name>
- <Street>123 Maple Street</Street>
- <City>Mill Valley</City>
- <State>CA</State>
- <Zip>10999</Zip>
- <Country>USA</Country>
- </Address>
- <Address Type="Billing">
- <Name>Tai Yee</Name>
- <Street>8 Oak Avenue</Street>
- <City>Old Town</City>
- <State>PA</State>
- <Zip>95819</Zip>
- <Country>USA</Country>
- </Address>
- <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>
- <Items>
- <Item PartNumber="872-AA">
- <ProductName>Lawnmower</ProductName>
- <Quantity>1</Quantity>
- <USPrice>148.95</USPrice>
- <Comment>Confirm this is electric</Comment>
- </Item>
- <Item PartNumber="926-AA">
- <ProductName>Baby Monitor</ProductName>
- <Quantity>2</Quantity>
- <USPrice>39.98</USPrice>
- <ShipDate>1999-05-21</ShipDate>
- </Item>
- </Items>
- </PurchaseOrder>
那個帖子最後一個版本的代碼复制代码
- goto :ansi
- rem UTF-8 编码支持
- chcp 65001
- cls
- :ansi
- @echo off
- set /p "strFile=请拖入处理文本:"
- setlocal enabledelayedexpansion
- if not exist !strFile! (
- echo;"!strFile!" 文件不找不到!!
- exit /b
- )
- endlocal
- rem 定义用于命名的字符表
- set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- set n=0
- rem 定义可用于命名的字符表
- set tab="." [ + - ^"
- rem 例外情况定义
- set exception=Extra Button
- set z=
- set o=
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims==" %%a in (!strFile!) do (
- for /f "tokens=1,2 delims= " %%K in ("1 !z!") do (
- endlocal
- set z=%%L
- set s1=%%a
- set s2=%%b
- setlocal enabledelayedexpansion
- )
- if defined z for %%k in (%exception%) do (
- if "#!s1:</%%k>=!" neq "#!s1!" (
- set z=!z:~1!
- )
- )
- for %%k in (%exception%) do (
- if "!s1:<%%k=!" neq "!s1!" (
- if "#!s2:/>=!" equ "#!s2!" (
- set z=!z!y
- ) else (
- set o=o
- )
- )
- )
- if "!o!!z!!s1:~-5!" equ " name" (
- set s3=!s2:^"= !
- for /f "tokens=1 delims= " %%c in ("!s3!") do (
- if not defined #%%~c (
- call :getn !n! ss
- set sa=%%~c
- rem 保留"."后面的尾巴
- if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
- for /f "tokens=1,2,3 delims= " %%x in ("!n! !ss! !z!") do (
- endlocal
- set $%%x=%%y囧%%~c
- set #%%~c=%%y
- set /a n+=1
- set z=%%z
- setlocal enabledelayedexpansion
- )
- )
- )
- )
- )
- set/a n-=1
- (
- for /f "tokens=1,*" %%a in (!strFile!) do (
- endlocal
- set stra=%%a
- set str=%%b
- setlocal enabledelayedexpansion
- if defined str (
- set "str=!stra! !str: =!"
- for /l %%1 in (0,1,%n%) do (
- for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
- if "!str:%%c=!" neq "!str!" (
- if "!str:%%c=%%c!" equ "!str!" (
- set str=!str:"%%c"="%%b"!
- set str=!str:"@%%c"="@%%b"!
- set str=!str:"#%%c"="#%%b"!
- if "!str:*%%c=!" neq "!str!" (
- call :parti %%c %%b
- )
- ))
- )
- )
- ) else (
- set str=%%a
- )
- echo;!str!
- )
- ) >结果.txt
- start 结果.txt
- rem 查看有多少个更改
- set $
- pause
- exit /b
- rem 计算临名字,可加上前缀,多个,A 到 ZZZZ 多个
- :getn
- (set L=%1
- set M=%1
- set %2=)
- :loop
- set /a M=L %% 26
- set %2=!%2!!ASC:~%M%,1!
- if !M! neq !L! set /a L=L/26&goto :loop
- goto :eof
- rem 非双引号位置处理 如:#xxxx+ #xxxx[ ] #xxxx.dir
- :parti
- for %%a in (!tab!) do (
- if "!str:%1%%~a=!" neq "!str!" (
- if "!str:%1%%~a=%1%%~a!" equ "!str!" (
- set str=!str:@%1%%~a=@%2%%~a!
- set str=!str:#%1%%~a=#%2%%~a!
- if "!str:*%1=!" equ "!str!" (
- goto :partiE
- )
- )
- )
- )
- :partiE
- goto :eof
复制代码
- $global:n = 0; $Hash=@{};
- $str = [IO.File]::ReadAllText('manifest.xml',[Text.Encoding]::Default);
- #修改name属性的值,如果name属性值以music_prev或music_display或music_next等开头,或者节点名为Extra,则不修改
- $reg1 = '(?<=<(?!Extra)[^<>]*\sname=")(?!notice)(?!music_(?:prev|display|next|play|pause|album_cover))(?!notification_(?:icon|title|content|time|info|subtext|key|list))[^"]+(?=")';
- #如果command与target同时出现,command="play",则修改target属性值,
- $reg2 = '(?<=\starget=")[^"]+(?="[^<>]*\scommand="play)|(?<=\scommand="play[^<>]*\starget=") [^"]+(?=")';
- $str = [regex]::Replace($str, $reg1 + '|' + $reg2, {
- param($m);
- $key = $m.Value;
- if( !$Hash.ContainsKey($key) ){
- $x = [Math]::floor( $global:n / 26 );
- if($x) { $chr1 = [char]( 64 + [int]$x ) } else { $chr1 = '' }
- $Hash[$key] = $chr1 + [char]( 65 + $global:n++ % 26 );
- }
- $Hash[$key];
- })
- $arrKey = $Hash.Keys | sort -Desc {$_.Length};
- #如果属性值包含@#字符,或者属性值以 .animation或.visibility 结尾,则修改
- $str = [regex]::Replace($str, '(?<=")([^"@#]*[@#][^"]+|[^"]+(?:\.animation|\.visibility))(?=")', {
- param($m);
- $s = $m.Groups[1].Value;
- forEach( $key In $arrKey ) {
- $s = $s.Replace( '@' + $Key, '@' + $Hash[$Key] );
- $s = $s.Replace( '#' + $Key, '#' + $Hash[$Key] );
- $s = $s.Replace( $Key + '.animation', $Hash[$Key] + '.animation' );
- $s = $s.Replace( $Key + '.visibility', $Hash[$Key] + '.visibility' );
- }
- $s;
- })
- [IO.File]::WriteAllText('manifest2.xml', $str, [Text.Encoding]::UTF8);
- $str = [IO.File]::ReadAllText('config.xml', [Text.Encoding]::Default);
- $str = [regex]::Replace($str, '(?<=\sid=")[^"]+(?=")', {param($m); if($Hash[$m.Value]){$Hash[$m.Value]}else{$m.Value}});
- [IO.File]::WriteAllText('config2.xml', $str, [Text.Encoding]::UTF8);
- echo 'Done';
- [Console]::ReadKey()
你觉得这个脚本咋样?是不是完胜正则万倍?复制代码
- echo 範例
我该说你啥好?喜欢抬杠,又抬不到点上。
你把我写的脚本贴出来是几个意思?是想跟你的对比,让我难堪是不是?
既然贴出来了,你看都不看一眼就开始胡咧咧?
他定义 A~ZZZ 变量范围明明有目的,没看见脚本有两个xml文件吗?他想把第二个文件与第一个文件按照某种对应关系进行修改。
明白不?打脸不?疼不?不疼我再打打?
echo 範例
你觉得这个脚本咋样?是不是完胜正则万倍?
算啦吧,各回各家,各找各妈。你的帖子我不再回复。
欢迎光临 批处理之家 (http://bbs.bathome.net/) | Powered by Discuz! 7.2 |