标题: 【已解决】【50元红包】批处理xml文件里的x、y、w、h、expression值计算 [打印本页]
作者: linfeng_321 时间: 2022-4-1 19:49 标题: 【已解决】【50元红包】批处理xml文件里的x、y、w、h、expression值计算
本帖最后由 linfeng_321 于 2022-4-1 22:03 编辑
批处理xml文件里的x、y、w、h、expression值计算
------------------------------
变量路径:$xmlfolder=".\文档"
包含子文件夹里的xml文件
-----------
.\文档\a\a122123.xml
.\文档\b\hello.xml
.\文档\h\welcome.xml
------------------------------
x=""
y=""
w=""
h=""
expression=""
------------------------------
以=""举例说明(只能""包含数字才能计算,排除组合#和a-z、0-9参数):
-----------
格式1、x="120+100+320+60",结果为:x="600"
格式2、x="120-100-320-60",结果为:x="-360"
格式3、x="-120-100-320-60",结果为:x="-600"
格式4、x="120-100+320-60",结果为:x="280"
-----------
格式5、x="120+100+320+60+#sw",结果为:x="600+#sw"
格式6、x="#sw+120+100+320+60",结果为:x="#sw+600"
-----------
格式7、x="120-100-320-60+#sw",结果为:x="-360+#sw"
格式8、x="120-100-320-60-#sw",结果为:x="-360-#sw"
-----------
格式9、x="#sw+120-100-320-60",结果为:x="#sw-360"
格式10、x="#sw-120-100-320-60",结果为:x="#sw-600"
-----------
格式11:expression="ifelse(ge(#beijing_switch,5-1),结果为:expression="ifelse(ge(#beijing_switch,4)
-----------
特殊格式1:x="#120+100+320+60",结果为:x="#120+480"
特殊格式2:x="100+320+60+#120",结果为:x="480+#120"
作者: Batcher 时间: 2022-4-1 20:07
回复 1# linfeng_321
请把你的XML文件上传到网盘吧
作者: linfeng_321 时间: 2022-4-1 20:57
回复 1# linfeng_321
xml文件内容大概如下:
<Image x="480+16+250" y="#312+120" w="#sw+120-100-320-60" h="120+100+320+60+#sw" src="zq.png"/>
<Image x="480+16+#riqi_0001_cn_xfy_1.bmp_width" y="300" w="#sw-120-100-320-60" src="34.png"/>
<Image x="480+16+" y="110-20" src="21.png" expression="ifelse(ge(#beijing_switch,5-1)"/>
<Image x="200-120-10" y="50+20-10" w="180+120" h="1920-200+30" src="32.png"/>
<Image x="100+20-10+300" y="300+20" src="12.png" expression="ifelse(ge(#beijing_switch,20-1)/>
作者: zaqmlp 时间: 2022-4-1 21:24
本帖最后由 zaqmlp 于 2022-4-1 22:13 编辑
报酬有点少- <# :
- cls&echo off&cd /d "%~dp0"&rem 编码ANSI
- powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
- pause
- exit
- #>
- $xmlfolder=".\文档";
- if(-not (test-path -literal $xmlfolder)){write-host ('"'+$xmlfolder+'" 未找到');exit;}
- $enc=New-Object System.Text.UTF8Encoding $False;
- $files=@(dir -literal $xmlfolder -recurse|?{('.xml' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- write-host $files[$i].FullName
- $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
- $m1=[regex]::matches($text, '\b(x|y|w|h|expression)="([^"]+?)"','IgnoreCase');
- foreach($it in $m1){
- $oldword=$it.groups[0].value;
- $ov=$it.groups[2].value;
- $nv=[regex]::replace($ov, '(?<=^|,| )[-+]?\d+(?:[-+]\d+){1,}', {
- param($z);
- $s=Invoke-Expression $z.groups[0].value;
- return $s;
- })
- $nv=[regex]::replace($nv, '(?<=[^\d+-])(?:[-+]\d+){2,}|(?<=#\d+)(?:[-+]\d+){2,}', {
- param($z);
- $s=Invoke-Expression $z.groups[0].value;
- if($s -match '^-'){return $s;}else{return ('+'+$s.toString());}
- })
- $newword=$oldword.replace($ov, $nv);
- $text=$text.replace($oldword, $newword);
- }
- [IO.File]::WriteAllText($files[$i].FullName, $text, $enc);
- }
复制代码
作者: linfeng_321 时间: 2022-4-1 21:58
回复 4# zaqmlp
100元红包转过去了
这种情况无法计算:expression="ifelse(ge(#beijing_switch,20-1)/>
20-1
作者: linfeng_321 时间: 2022-4-1 22:02
回复 4# zaqmlp
没有问题了,谢谢!
作者: zaqmlp 时间: 2022-4-1 22:06
回复 5# linfeng_321
不清楚你的实际文件,看你给出的例子引号有缺失
作者: linfeng_321 时间: 2022-4-1 22:08
回复 7# zaqmlp
是的,缺少一个引号导致。
帮我再加一个判断,<Image x="+20+300" y="+10+300" src="12.png"/>,结果为<Image x="320" y="310" src="12.png"/>
谢谢!
作者: zaqmlp 时间: 2022-4-1 22:17
回复 8# linfeng_321
已修改
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |