返回列表 发帖
既然是json文件,那就按json处理呢?不用正则应该可以,如有样本可以试一下

TOP

提取含browser\features\ 关键词的路径
@if(0)==(0) @echo off
set "file=extensions.json"
set "s=\browser\features\"
cscript.exe -NoLogo -E:JScript %0  "%file%" "%s%"
PAUSE & exit/b
rem 保存为ANSI文件
@end
function adoLoadText(filename, charset) {
    stream = new ActiveXObject("ADODB.Stream");
    stream.type = 2;
    stream.charset = charset;
    stream.open();
    stream.loadFromFile(filename);
    text = stream.readText(-1);
    stream.close();
    return(text);
}
var file = WSH.Arguments.Item(0);
var jsontext =adoLoadText(file, "UTF-8");
var obj = new Function("return" + unescape(jsontext))();
var re = new RegExp(WSH.Arguments.Item(1).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
for (var k  in obj) {var arr = obj[k] }
for (var i=0, len = arr.length;  i<len;i++) {
      var path=arr[i]["path"]
      if (re.test(path))  {WSH.Echo(path)}
}COPY

TOP

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

先ECHO 看这样替换成功不 (没写入文件)
@if(0)==(0) @echo off
set "file=extensions.json"
set "oid=%cd%"
set "s=(?=\Profiles\extensions\|\browser\features\)"
cscript.exe -NoLogo -E:JScript %0  "%file%" "%s%" "%oid%"
PAUSE & exit/b
rem 保存为ANSI文件
@end
function adoLoadText(filename, charset) {
    stream = new ActiveXObject("ADODB.Stream");
    stream.type = 2;
    stream.charset = charset;
    stream.open();
    stream.loadFromFile(filename);
    text = stream.readText(-1);
    stream.close();
    return(text);
}
var s = WSH.Arguments.Item(1);
var p = WSH.Arguments.Item(2);
var file = WSH.Arguments.Item(0);
var jsontext =adoLoadText(file, "UTF-8");
var obj = new Function("return" + unescape(jsontext))();
var re = new RegExp(s.replace(/\\/g, "\\$&"));
var reg =new RegExp( '('+ '.+?' + ')'+ s.replace(/\\/g, "\\$&"));
for (var k  in obj) {var arr = obj[k] }
for (var i=0, len = arr.length;  i<len;i++) {
      var path=arr[i]["path"];
      if (re.test(path))
      {
           WSH.Echo( path.replace( reg, function($a,$b) { return( p ) } ) );
      }
}COPY

TOP

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

TOP

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

TOP

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

TOP

返回列表