找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: smss

100元人民币 求bat或Powershell处理文本内容【已解决】

  [复制链接]
 楼主| 发表于 2019-5-22 10:32:56 | 显示全部楼层
回复 14# 523066680
感谢 这个应该怎样使用 我电脑中没有 不是BAT也不是PS?还要安装其它什么吗??
发表于 2019-5-22 10:54:19 | 显示全部楼层
回复 13# smss


    我测试没有发现你所说的问题。请分别举例说明问题1,问题2
发表于 2019-5-22 11:06:18 | 显示全部楼层
回复 16# smss


参考:怎样在Windows系统中搭建Python环境?
http://bbs.bathome.net/thread-15581-1-1.html
 楼主| 发表于 2019-5-22 13:10:05 | 显示全部楼层
本帖最后由 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="#++#-"  机器运算不了 这就尴尬啦
发表于 2019-5-22 13:27:54 | 显示全部楼层
已更新,试试
发表于 2019-5-22 14:41:47 | 显示全部楼层
本帖最后由 523066680 于 2019-5-23 11:45 编辑

NULL
发表于 2019-5-22 15:13:29 | 显示全部楼层
回复 19# smss


    有可能变量名超出26个英文字母范围,变成非字母变量名了,已修改。
 楼主| 发表于 2019-5-22 21:06:51 | 显示全部楼层
本帖最后由 smss 于 2019-5-22 21:09 编辑

回复 22# WHY
现在才空下来测试
中文全部乱码无法用 建议使用昨天那个加入判断和筛选 即可
  1. $global:n = 65; $h = @{};
  2. $s = [IO.File]::ReadAllText('manifest.txt', [Text.Encoding]::Default);
  3. $s = [regex]::Replace($s, '(?<=\bname=")[^"]+(?=")',{param($m);$a=$m.Value; if(!$h.ContainsKey($a)){$h[$a]=[char]($global:n++)}; $h[$a]});
  4. $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});
  5. [IO.File]::WriteAllText('manifest.xml', $s, [Text.Encoding]::UTF8);
复制代码
这个含中文不乱码 XML中含有数组的代码被替换后无法工作
发表于 2019-5-22 21:57:47 | 显示全部楼层
回复 23# smss


    请举例说明:XML中含有数组的代码被替换后无法工作。
另外,我这里测试中文字符没有乱码,把 [Text.Encoding]::Default 改成 [Text.Encoding]::UTF8 试试
 楼主| 发表于 2019-5-23 01:20:09 | 显示全部楼层
本帖最后由 smss 于 2019-5-23 11:20 编辑

回复 24# WHY
需要加入以下筛选
系统固定名称别替换
特点<Extra 例如<Extra name="ShowCameraWhenLocked" type="boolean" expression="1"/>
以下名称固定需过滤
name="music_prev"
name="music_display"
name="music_next"
name="music_play"
name="music_pause"
或许还有  最好说明下在哪添加过滤

以.animation .visibility结尾调用需要同步变更(同以# @开头调用)
例如<MusicControl y="#screen_height/2" name="music_control" autoShow="true" visibility="false" enableLyric="true" updateLyricInterval="100"> name="music_control"被替换成了name="A"
<Command target="music_control.animation" value="play"/>
<Command target="music_control.visibility" value="false" condition="not(#appear)" delay="500"/>
需替换成A.animation和A.visibility
发表于 2019-5-23 01:24:13 | 显示全部楼层
1,只检查第一个等号是否是name="xxxxx",作为要改的名字,
2,所有@和#对应的字符串都会匹配更改

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "strFile=请拖入处理文本:"
  4. if not exist !strFile! (
  5.         echo;"!strFile!" 文件不找不到!!
  6.         exit /b
  7. )

  8. rem 定义用于命名的字符表
  9. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  10. set n=0


  11. (
  12. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  13.         set s1=%%a
  14.         set s2=%%b
  15.         if "!s1:~-5!" == " name" (

  16.                 for /f "tokens=1*" %%c in ("%%b") do (
  17.                         call        :getn !n! ss
  18.                         echo;!s1!="!ss!" %%d
  19.                         set $!n!=!ss!囧%%~c
  20.                         set /a n+=1
  21.                 )
  22.        
  23.         ) else (
  24.                 echo;!s1!=%%b
  25.         )

  26. )
  27. ) >temp.txt

  28. set/a n-=1

  29. (
  30. for /f "tokens=*" %%a in (temp.txt) do (
  31.         set str=%%a
  32.         for /l %%1 in (0,1,!n!) do (
  33.                 for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  34.                         set str=!str:@%%c=@%%b!
  35.                         set str=!str:#%%c=#%%b!
  36.                 )
  37.         )
  38.         echo;!str!
  39. )

  40. ) > 结果.txt

  41. type 结果.txt

  42. rem 查看有多少个更改
  43. set $

  44. pause

  45. exit /b

  46. :getn        计算临名字,可加上前缀
  47. set L=%1
  48. set l1=%1
  49. set %2=
  50. :loop
  51. set /a M=L %% 26

  52. set %2=!ASC:~%M%,1!!%2!

  53. if !L1! neq !L! set /a L=L/26&goto :loop

  54. goto :eof
复制代码
 楼主| 发表于 2019-5-23 01:48:50 | 显示全部楼层
回复 26# netbenton
感谢你的热情回复
这个用BAT处理中文会乱码 而且后边加的过滤条件 貌似有点难以做到
发表于 2019-5-23 02:06:46 | 显示全部楼层
回复 27# smss
你试过这个会出现乱码?
后面加的过滤,改好了!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "strFile=请拖入处理文本:"
  4. if not exist !strFile! (
  5.         echo;"!strFile!" 文件不找不到!!
  6.         exit /b
  7. )

  8. rem 定义用于命名的字符表
  9. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  10. set n=0

  11. rem 例外情况定义
  12. set exception=Extra

  13. (
  14. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  15.         set s1=%%a
  16.         set s2=%%b

  17.         if "!s1:%exception%=!!s1:~-5!" == "!s1! name" (

  18.                 for /f "tokens=1*" %%c in ("%%b") do (
  19.                         call        :getn !n! ss
  20.                         set sa=%%~c
  21.                        
  22.                         rem 保留"."后面的尾巴
  23.                         if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!

  24.                         echo;!s1!="!ss!" %%d
  25.                         set $!n!=!ss!囧%%~c
  26.                         set /a n+=1
  27.                 )
  28.        
  29.         ) else (
  30.                 echo;!s1!=%%b
  31.         )

  32. )
  33. ) >temp.txt

  34. set/a n-=1

  35. (
  36. for /f "tokens=*" %%a in (temp.txt) do (
  37.         set str=%%a
  38.         for /l %%1 in (0,1,!n!) do (
  39.                 for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  40.                         set str=!str:@%%c=@%%b!
  41.                         set str=!str:#%%c=#%%b!
  42.                 )
  43.         )
  44.         echo;!str!
  45. )

  46. ) > 结果.txt

  47. type 结果.txt

  48. rem 查看有多少个更改
  49. set $

  50. pause

  51. exit /b

  52. :getn        计算临名字,可加上前缀
  53. set L=%1
  54. set l1=%1
  55. set %2=
  56. :loop
  57. set /a M=L %% 26

  58. set %2=!ASC:~%M%,1!!%2!

  59. if !L1! neq !L! set /a L=L/26&goto :loop

  60. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 netbenton好久不见

查看全部评分

 楼主| 发表于 2019-5-23 11:08:31 | 显示全部楼层
本帖最后由 smss 于 2019-5-23 11:21 编辑


回复 28# netbenton

中文乱码
首<? 被替换成了&#239;&#187;
尾>被替换成了>=
肉眼可见错误
发表于 2019-5-23 11:22:59 | 显示全部楼层
回复 25# smss


1. "XML中含有数组的代码被替换后无法工作" 这个问题你没有举例说明;
2. 中文字符乱码问题是否解决你没有交代;
3. 你应该事先总结好规律,哪些改哪些不改,怎么改,事先想好。

评分

参与人数 2PB +6 技术 +2 收起 理由
523066680 + 6 + 1 辛苦了
smss + 1 这个修改也是个循序渐进的过程,不可能一下考 ...

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:08 , Processed in 0.024344 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表