[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
既然是json文件,那就按json处理呢?不用正则应该可以,如有样本可以试一下

TOP

提取含browser\features\ 关键词的路径
  1. @if(0)==(0) @echo off
  2. set "file=extensions.json"
  3. set "s=\browser\features\"
  4. cscript.exe -NoLogo -E:JScript %0  "%file%" "%s%"
  5. PAUSE & exit/b
  6. rem 保存为ANSI文件
  7. @end
  8. function adoLoadText(filename, charset) {
  9.     stream = new ActiveXObject("ADODB.Stream");
  10.     stream.type = 2;
  11.     stream.charset = charset;
  12.     stream.open();
  13.     stream.loadFromFile(filename);
  14.     text = stream.readText(-1);
  15.     stream.close();
  16.     return(text);
  17. }
  18. var file = WSH.Arguments.Item(0);
  19. var jsontext =adoLoadText(file, "UTF-8");
  20. var obj = new Function("return" + unescape(jsontext))();
  21. var re = new RegExp(WSH.Arguments.Item(1).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
  22. for (var k  in obj) {var arr = obj[k] }
  23. for (var i=0, len = arr.length;  i<len;i++) {
  24.       var path=arr[i]["path"]
  25.       if (re.test(path))  {WSH.Echo(path)}
  26. }
复制代码

TOP

本帖最后由 terse 于 2022-11-28 21:26 编辑

先ECHO 看这样替换成功不 (没写入文件)
  1. @if(0)==(0) @echo off
  2. set "file=extensions.json"
  3. set "oid=%cd%"
  4. set "s=(?=\Profiles\extensions\|\browser\features\)"
  5. cscript.exe -NoLogo -E:JScript %0  "%file%" "%s%" "%oid%"
  6. PAUSE & exit/b
  7. rem 保存为ANSI文件
  8. @end
  9. function adoLoadText(filename, charset) {
  10.     stream = new ActiveXObject("ADODB.Stream");
  11.     stream.type = 2;
  12.     stream.charset = charset;
  13.     stream.open();
  14.     stream.loadFromFile(filename);
  15.     text = stream.readText(-1);
  16.     stream.close();
  17.     return(text);
  18. }
  19. var s = WSH.Arguments.Item(1);
  20. var p = WSH.Arguments.Item(2);
  21. var file = WSH.Arguments.Item(0);
  22. var jsontext =adoLoadText(file, "UTF-8");
  23. var obj = new Function("return" + unescape(jsontext))();
  24. var re = new RegExp(s.replace(/\\/g, "\\$&"));
  25. var reg =new RegExp( '('+ '.+?' + ')'+ s.replace(/\\/g, "\\$&"));
  26. for (var k  in obj) {var arr = obj[k] }
  27. for (var i=0, len = arr.length;  i<len;i++) {
  28.       var path=arr[i]["path"];
  29.       if (re.test(path))
  30.       {
  31.            WSH.Echo( path.replace( reg, function($a,$b) { return( p ) } ) );
  32.       }
  33. }
复制代码

TOP

Ps
  1. <# :
  2. @echo off
  3. PowerShell -NoProfile -C ". ([ScriptBlock]::Create((gc -Literal '%~f0') -join \"`r`n\"))"
  4. pause & exit/b
  5. #>
  6. $oid = [Io.Directory]::GetCurrentDirectory()
  7. $jointxt =  @(CAT .\extensions.json  -Encoding UTF8)|ConvertFrom-Json
  8. $pat ='^.*?\\(?=Profiles\\extensions|browser\\features)'
  9. for ( $i=0; $i -lt $jointxt.addons.Count;$i++) {
  10.     $jointxt.addons[$i].path = $jointxt.addons[$i].path -replace $pat,$oid
  11. }
  12. $jointxt|ConvertTo-Json |  sc 'New_extensions.json' -Encoding UTF8
复制代码

TOP

回复 33# kidzgy
直接正则替换效率提高的  练手一下
PS
  1. <# :
  2. @echo off
  3. PowerShell -NoProfile -C ". ([ScriptBlock]::Create((gc -Literal '%~f0') -join \"`r`n\"))"
  4. pause & exit/b
  5. #>
  6. $oid = [Io.Directory]::GetCurrentDirectory() -replace '\\','\\'
  7. $pat = '(?<="path":")[^"]+(?=\\\\Profiles\\\\extensions\\\\|\\\\browser\\\\features\\\\)'
  8. $(gc extensions.json -Raw -Encoding UTF8) -replace $pat , $oid | sc 'extensions.json' -Encoding UTF8
复制代码
JS代码长,效率不低
  1. @if(0)==(0) @echo off
  2. set "file=extensions.json"
  3. set "ph=%~dp0"
  4. cscript.exe -NoLogo -E:JScript %0  "%file%" "%ph:~,-1%"
  5. PAUSE & exit/b
  6. @end
  7. function adoLoadText(filename, charset) {
  8.     stream = new ActiveXObject("ADODB.Stream");
  9.     stream.type = 2;
  10.     stream.charset = charset;
  11.     stream.open();
  12.     stream.loadFromFile(filename);
  13.     text = stream.readText(-1);
  14.     stream.close();
  15.     return(text);
  16. }
  17. function adoSaveText(filename, text) {
  18.   var stream;
  19.   stream = new ActiveXObject("ADODB.Stream");
  20.   stream.type = 2;
  21.   stream.charset ='utf-8';
  22.   stream.open();
  23.   stream.writeText(text);
  24.   stream.saveToFile(filename, 2);
  25.   stream.close();
  26. }
  27. var file = WSH.Arguments.Item(0);
  28. var p = WSH.Arguments.Item(1).replace(/\\/g,"\\\\");
  29. var jsontext =adoLoadText(file, "UTF-8");
  30. var re =/("path":")[^"]+(?=\\\\Profiles\\\\extensions\\\\|\\\\browser\\\\features\\\\)/ig;
  31. adoSaveText('extensions.json',jsontext.replace( re, function($a,$b ) {return($b+p)}));
复制代码

TOP

回复 35# kidzgy
我这边测试的是你发的extensions.json文件,都通过测试,系统win10
会不会文件编码问题

TOP

返回列表