[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
已更新,试试
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 smss 于 2019-5-22 13:20 编辑

回复 17# WHY
昨天测试了zaqmlp的代码生成的文本在手机上试 手机是直接无法开机刷了一次ROM但锁屏数据还在 只好清数据再刷了次ROM
用BCompare比对原码和生成代码 还是发现不少问题的 目前看那方法 效率较低 自己看不懂这语言只好作罢

你给的方法是目前看到效率最高的 比对原码时变量名能被有效替换 后面关联时也可同步替换 但是有时会出错 我会截图你看

问题1例子 name="city_id"以下统称变量名 被替换成了XML中涉及的运算符号 当该变量名被调用运算时将可能出现 如name="city_id"替换成了name="+" name="city_id2"替换成了name="-"
后边调用这个时x="#city_id+#city_id2"将被替换成x="#++#-"  机器运算不了 这就尴尬啦

TOP

回复 16# smss


参考:怎样在Windows系统中搭建Python环境?
http://bbs.bathome.net/thread-15581-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# smss


    我测试没有发现你所说的问题。请分别举例说明问题1,问题2

TOP

回复 14# 523066680
感谢 这个应该怎样使用 我电脑中没有 不是BAT也不是PS?还要安装其它什么吗??

TOP

回复 14# 523066680


    python?
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

本帖最后由 523066680 于 2019-5-23 11:46 编辑
  1. use Mojo::DOM;
  2. use File::Slurp;
  3. my $xml = read_file( "test.xml" );
  4. my $dom = Mojo::DOM->new->xml(1)->parse( $xml );
  5. my @code = ('A' .. 'ZZZ');
  6. for my $e ( $dom->find("Variable")->each ) {
  7.     my $k = $e->attr("name");
  8.     $h{$k} = $code[$id++] unless (exists $h{$k});
  9.     $e->attr("name" => $h{$k} );
  10. }
  11. for my $e ( $dom->find("Text")->each ) {
  12.     my $exp = $e->attr("textExp");
  13.     $exp =~s/([\@\#])([\w\_]+)/$1$h{$2}/g;
  14.     $e->attr("textExp"=>$exp);
  15. }
  16. printf "%s\n", $dom;
复制代码
  1. <Variable column="city_id" name="A" type="string" />
  2. <Variable column="city_name" name="B" type="string" />
  3. <Variable column="weather_type" name="C" type="int" />
  4. <Variable column="city_id" name="A" type="string" />
  5. <Text alignV="center" color="#ababab" marqueeGap="2" marqueeSpeed="50" name="Qm" size="30" textExp="@A" w="458" x="100" y="300" />
  6. <Text alignV="center" color="#ababab" marqueeGap="2" marqueeSpeed="50" name="QW" size="30" textExp="#B" w="458" x="100" y="300" />
  7. <Text alignV="center" color="#ababab" marqueeGap="2" marqueeSpeed="50" name="QA" size="30" textExp="#C+#A" w="458" x="100" y="300" />
复制代码

TOP

回复 7# WHY

有如下几个问题
1.名称中不要出现运算符号 如name="call_name1" 居然替换成了*或/

需要规避符号 +,-,*,/,%,**,|,||,=,==, !,not

2数组不能使用或许是上个问题导致

TOP

回复 11# smss


    嗯,无所谓,不同的实现方式,WHY兄用powershell,本身对各种对象支持就要好些,写出的代码也更简捷,而且代码中正则表达式过滤条件也要好些,没毛病。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 10# amwfjhh

哥楼上有更好更简短有力的代码 而且我已支付给了1楼一半的钱

不过我更倾向于WHY的方法 化繁为简 效率高

TOP

回复 8# smss


    就是单个sed.exe程序,论坛也能搜得到。很好下载的。玩批处理的或多或少都要用到正则表达式,各种语言中也有支持的,不过支持的程度不一样,sed是对正则支持比较全面的一个工具了。
下载下来后直接放到批处理同级目录即可调用,或者将其拷到系统PATH路径下(比如c:\windows),则任意目录下都可以调用它。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

本帖最后由 smss 于 2019-5-22 00:53 编辑

回复 7# WHY 写的太棒了
有个小问题可以处理下吗 就是其中有数组时共用同一个名称是要替换成同名称的 虽然也替换成同名了 单生成的XTX文本 可以被读取 但部分功能不在
说明 混编时还是有问题

TOP

回复 6# amwfjhh
Win10怎样安装这个??

TOP

本帖最后由 WHY 于 2019-5-22 15:10 编辑

test.bat
  1. @echo off
  2. 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"
  3. pause
复制代码
变量名范围:A~Z、AA~ZZ,应该够用
1

评分人数

    • smss: 技术大牛技术 + 1

TOP

正则处理由sed来完成,故运行时请确保系统内有sed命令。
  1. @if (0)==(0) echo off
  2. setlocal enabledelayedexpansion
  3. pushd %~dp0
  4. REM 取得名称列表
  5. set "strDict="
  6. set "nCount=0"
  7. set /p "strFile=请拖入处理文本:"
  8. set "strFile=!strFile:"=!"
  9. set "strFilter1=name=.[^^\"]*."
  10. set "strFilter2=.*name=\"\([^^\"]*\)\".*$"
  11. for /f "tokens=*" %%i in ('sed -n "/!strFilter1!/{s/!strFilter2!/\1/;p}" "!strFile!"') do (
  12. set "strTmpName=%%i"
  13. echo,!strDict! | findstr /i "!strTmpName!" >nul 2>nul && (
  14. REM 有字典存在,跳过
  15. ) || (
  16. REM 无字典,添加记录
  17. set /a "nCount+=1"
  18. set "strDict=!strDict!(!strTmpName!)"
  19. )
  20. )
  21. echo,总共存在变量 !nCount! 个
  22. set "nChar=64"
  23. set "strRegExp="
  24. for /l %%i in (1 1 !nCount!) do (
  25. set /a "nChar+=1"
  26. for /f "tokens=*" %%j in ('cscript -nologo -e:jscript %~s0 GetCharFromCode !nChar!') do set "strChar=%%j"
  27. call :_GetParm %%i
  28. )
  29. echo,替换变量正则表达式为 :
  30. echo,!strRegExp!
  31. echo,&echo,
  32. REM 进行关键内容替换
  33. for /f "tokens=*" %%i in ('echo,!strFile!') do set "strNewFile=%%~dpni_rep%%~xi"
  34. >"!strNewFile!" sed "!strRegExp!" "!strFile!"
  35. type "!strNewFile!"
  36. pause
  37. goto :EOF
  38. :_GetParm
  39. (
  40. for /f "tokens=%~1 delims=()" %%a in ('echo,!strDict!') do (
  41. echo,第 %%i 个变量 : %%a ==^> !strChar!
  42. set "strRegExp=!strRegExp!s/%%a/!strChar!/g;"
  43. )
  44. goto :EOF
  45. )
  46. @end
  47. var fun = WScript.Arguments(0);
  48. switch (fun) {
  49. case "GetCharFromCode":
  50. var nChar = parseInt(WScript.Arguments(1));
  51. GetCharFromCode(nChar);
  52. break;
  53. default:;
  54. }
  55. function GetCharFromCode(nChar) {
  56. WScript.Echo(String.fromCharCode(nChar));
  57. }
复制代码
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

返回列表