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

20元求脚本替换文本内容,问题描述如下:

  [复制链接]
发表于 2019-7-17 17:05:20 | 显示全部楼层 |阅读模式
问题描述:
当前路径下存在Test文件夹,Test下面有两个文本文件,需要包含 .method XXX 开始的字符串到下一个
.end method的内容全部用src里面的内容替换掉,包换 .method XXX 和.end method所在的行。
层级:
Test\dst
Test\src
文件内容:
dst的内容如下:
  1. # virtual methods
  2. .method protected canAcceleration()Z
  3.     .locals 5

  4.     .prologue
  5.     .line 914
  6.     const/4 v0, 0x0

  7.     return v0
  8. .end method

  9. .method protected getIsVip()V
  10.     .locals 3

  11.     .prologue
  12.     const/4 v0, 0x0

  13.     return v0
  14. .end method
复制代码
src的内容如下:
  1. .method protected getIsVip()V
  2.     .locals 3

  3.     .prologue
  4.     const/4 v0, 0x1

  5.     return v0
  6. .end method
复制代码
需要把dst里面的方法换成:
  1. .method protected getIsVip()V
  2.     .locals 3
  3.     .prologue
  4.     const/4 v0, 0x0

  5.     return v0
  6. .end method
复制代码
这个字段区间里面的内容全部换成 src 里面的文本内容 :
  1. .method protected getIsVip()V
  2.     .locals 3
  3.     .prologue
  4.     const/4 v0, 0x1

  5.     return v0
  6. .end method
复制代码
发表于 2019-7-17 17:15:59 | 显示全部楼层
费用、联系方式呢
 楼主| 发表于 2019-7-17 17:19:28 | 显示全部楼层
我的思路是:
(1)先找到 Test 文件中的 dst 文件 ,然后读取.method protected getIsVip()V的所在行,记录下此时的行号 %StartLineNumber%,然后继续查找与.method protected getIsVip()V相匹配的.end method,同样记录此时的.end method所在的行号%EndLineNumber%。
(2) 此时读取src文件内的所有文本内容,直接替换掉%StartLineNumber%所在行和%EndLineNumber%所在行的内容即可。
PS:每个人的码风不太一样,能实现就好,互相交流学习,请大家多多指教。
 楼主| 发表于 2019-7-17 17:29:44 | 显示全部楼层
回复 2# zaqmlp
Twenty Yuan. E-mail :1432689025@qq.com
发表于 2019-7-17 18:36:05 | 显示全部楼层
本帖最后由 flashercs 于 2019-7-17 18:51 编辑

保存为test.bat ,放在Test文件夹所在目录下,双击运行即可。
  1. 0<1/*,:
  2. @echo off
  3. cscript -nologo -e:jscript %0
  4. pause
  5. exit /b
  6. */
  7. ;
  8. var fso = new ActiveXObject('Scripting.FileSystemObject');
  9. var wshell = new ActiveXObject('WScript.Shell');
  10. wshell.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  11. var srcfile = 'Test\\src';
  12. var dstfile = 'Test\\dst';
  13. var tsread = fso.openTextFile(srcfile, 1, false, -2);
  14. while (!tsread.AtEndOfStream) {
  15.   var strsrc = tsread.ReadAll();
  16. }
  17. tsread.close();
  18. var re = /(\.method\s+.+)[\s\S]*?\.end\s+method/g;
  19. var arrsrc, objsrc = {};
  20. while (arrsrc = re.exec(strsrc)) {
  21.   objsrc[arrsrc[1]] = arrsrc[0];
  22. }
  23. tsread = fso.openTextFile(dstfile, 1, false, -2);
  24. while (!tsread.AtEndOfStream) {
  25.   var strdst = tsread.ReadAll();
  26. }
  27. tsread.close();
  28. var tswrite = fso.openTextFile(dstfile, 2, false, -2);
  29. tswrite.Write(strdst.replace(re, function ($0, $1) {
  30.   return objsrc.hasOwnProperty($1) ? objsrc[$1] : $0;
  31. }));
  32. tswrite.close();
  33. WScript.Echo('Done.');
  34. WScript.Quit();
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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