Board logo

标题: 【已解决】【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 编辑

报酬有点少
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&rem 编码ANSI
  3. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  4. pause
  5. exit
  6. #>
  7. $xmlfolder=".\文档";
  8. if(-not (test-path -literal $xmlfolder)){write-host ('"'+$xmlfolder+'" 未找到');exit;}
  9. $enc=New-Object System.Text.UTF8Encoding $False;
  10. $files=@(dir -literal $xmlfolder -recurse|?{('.xml' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  11. for($i=0;$i -lt $files.length;$i++){
  12.     write-host $files[$i].FullName
  13.     $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
  14.     $m1=[regex]::matches($text, '\b(x|y|w|h|expression)="([^"]+?)"','IgnoreCase');
  15.     foreach($it in $m1){
  16.         $oldword=$it.groups[0].value;
  17.         $ov=$it.groups[2].value;
  18.         $nv=[regex]::replace($ov, '(?<=^|,| )[-+]?\d+(?:[-+]\d+){1,}', {
  19.             param($z);
  20.             $s=Invoke-Expression $z.groups[0].value;
  21.             return $s;
  22.         })
  23.         $nv=[regex]::replace($nv, '(?<=[^\d+-])(?:[-+]\d+){2,}|(?<=#\d+)(?:[-+]\d+){2,}', {
  24.             param($z);
  25.             $s=Invoke-Expression $z.groups[0].value;
  26.             if($s -match '^-'){return $s;}else{return ('+'+$s.toString());}
  27.         })
  28.         $newword=$oldword.replace($ov, $nv);
  29.         $text=$text.replace($oldword, $newword);
  30.     }
  31.     [IO.File]::WriteAllText($files[$i].FullName, $text, $enc);
  32. }
复制代码

作者: 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