[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 smss 于 2019-5-23 20:49 编辑

回复 34# netbenton
不要替换成运算符号 无法识别这个 效率是个大问题

PS 1~2秒 电脑好像没费什么事 BAT开了CPU和风扇都感觉有压力 可以想像 两者有很大差距的
还有我已支付 zaqmlp一半钱 但过程不完美 而且他还要加价 在期间还有中伤WHY代码因为没有加UTF8 而乱码的行为 而在那WHY发贴之前zaqmlp给的代码同样效率低下 因此放弃zaqmlp的任何方式方法
以下放上代码 有心可以比对 供交流 不涉及人身攻击 善恶自有分辨
WHY 5.22
  1. $global:n = 65; $h = @{};
  2. $s = [IO.File]::ReadAllText('manifest.xml', [Text.Encoding]::UTF8);
  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('manifest2.xml', $s, [Text.Encoding]::UTF8);
复制代码
WHY5.22 15:10
  1. @echo off
  2. PowerShell "$h=@{};$s=[regex]::Replace([IO.File]::ReadAllText('manifest.xml',[Text.Encoding]::UTF8),'(?<=\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
复制代码
WHY 5.23
  1. $global:n = 0; $Hash=@{};
  2. $str = [IO.File]::ReadAllText('manifest.xml',[Text.Encoding]::UTF8);
  3. #修改name属性的值
  4. #如果name属性的值以music_prev或music_display或music_next等开头,或者节点名为Extra,则排除
  5. $str = [regex]::Replace($str, '(?<=<(?!Extra)[^<>]*\sname=")(?!music_(?:prev|display|next|play|pause))[^"]+(?=")', {
  6.     param($m);
  7.     $key = $m.Value;
  8.     if( !$Hash.ContainsKey($key) ){
  9.         $x = [Math]::floor( $global:n / 26 );
  10.         if($x) { $chr1 = [char]( 64 + [int]$x ) } else { $chr1 = '' }
  11.         $Hash[$key] = $chr1 + [char]( 65 + $global:n++ % 26 );
  12.     }
  13.     $Hash[$key];
  14. })
  15. #如果属性值包含@#字符,或者属性值以 .animation或.visibility 结尾,则修改
  16. $str = [regex]::Replace($str, '(?<=")([^"@#]*[@#][^"]+|[^"]+(?:\.animation|\.visibility))(?=")', {
  17.     param($m);
  18.     $s = $m.Groups[1].Value;
  19.     forEach( $key In $Hash.Keys ) {
  20.         $s = $s.Replace( '@' + $key, '@' + $Hash[$key] );
  21.         $s = $s.Replace( '#' + $key, '#' + $Hash[$key] );
  22.         $s = $s.Replace( $key + '.animation', $Hash[$key] + '.animation' );
  23.         $s = $s.Replace( $key + '.visibility', $Hash[$key] + '.visibility' );
  24.     }
  25.     $s;
  26. })
  27. [IO.File]::WriteAllText('manifest2.xml', $str, [Text.Encoding]::UTF8);
  28. echo 'Done';
  29. [Console]::ReadKey()
复制代码
zaqmlp5.22
  1. @echo off
  2. cd /d "%~dp0"
  3. set "folder=结果"
  4. md "%folder%" 2>nul
  5. powershell -NoProfile -ExecutionPolicy bypass ^
  6.     $files=@(dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Extension -eq '.xml')});^
  7.     $arr='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.toCharArray();^
  8.     for($i=0;$i -lt $files.length;$i++){^
  9.         write-host $files[$i].Name;^
  10.         $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  11.         $list=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  12.         $text=[IO.File]::ReadAllText($files[$i].FullName, [Text.Encoding]::UTF8);^
  13.         $m=[regex]::matches($text,'name=\""([^^\""]+)\""');^
  14.         $n=65;^
  15.         $newtext=$text;^
  16.         if($m.Count -ge 1){^
  17.             for($j=0;$j -lt $m.Count;$j++){^
  18.                 $kw=$m[$j].groups[0].value;^
  19.                 if(-not $dic.ContainsKey($kw)){^
  20.                     $c=@(get-random -input $arr -count 3) -join '';^
  21.                     while($list.ContainsKey($c)){$c=@(get-random -input $arr -count 3) -join '';};^
  22.                     $list.add($c,'');^
  23.                     $newtext=$newtext.replace($kw,'name=\"'+$c+'\"');^
  24.                     $newtext=[regex]::replace($newtext,'(?^<==)\""[^^\""]+?\""',{param($a);if($a.value.Contains($m[$j].groups[1].value)){$a.value.replace($m[$j].groups[1].value,$c);}else{$a.value}});^
  25.                     $dic.add($kw,[char]$n);^
  26.                     $n++;^
  27.                 };^
  28.             };^
  29.             [IO.File]::WriteAllText(('%folder%\'+$files[$i].Name),  $newtext, [Text.Encoding]::UTF8);^
  30.         };^
  31.     }
  32. pause
复制代码
zaqmlp5.23
  1. @echo off
  2. cd /d "%~dp0"
  3. set "folder=结果"
  4. md "%folder%" 2>nul
  5. powershell -NoProfile -ExecutionPolicy bypass ^
  6.     $files=@(dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Extension -eq '.xml')});^
  7.     $arr='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.toCharArray();^
  8.     for($i=0;$i -lt $files.length;$i++){^
  9.         write-host $files[$i].Name;^
  10.         $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  11.         $list=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  12.         $text=[IO.File]::ReadAllText($files[$i].FullName, [Text.Encoding]::UTF8);^
  13.         $m=[regex]::matches($text,'name=\""([^^\""]+)\""');^
  14.         $n=65;^
  15.         $newtext=$text;^
  16.         if($m.Count -ge 1){^
  17.             for($j=0;$j -lt $m.Count;$j++){^
  18.                 $kw=$m[$j].groups[0].value;^
  19.                 if(-not $dic.ContainsKey($kw)){^
  20.                     $c=@(get-random -input $arr -count 3) -join '';^
  21.                     while($list.ContainsKey($c)){$c=@(get-random -input $arr -count 3) -join '';};^
  22.                     $list.add($c,'');^
  23.                     $newtext=$newtext.replace($kw,'name=\"'+$c+'\"');^
  24.                     $newtext=[regex]::replace($newtext,'(?^<==)\""[^^\""]+?\""',{param($a);if($a.value.Contains($m[$j].groups[1].value)){$a.value.replace($m[$j].groups[1].value,$c);}else{$a.value}});^
  25.                     $dic.add($kw,[char]$n);^
  26.                     $n++;^
  27.                 };^
  28.             };^
  29.             [IO.File]::WriteAllText(('%folder%\'+$files[$i].Name),  $newtext, [Text.Encoding]::UTF8);^
  30.         };^
  31.     }
  32. pause
复制代码
zaqmlp5.23
  1. @echo off
  2. cd /d "%~dp0"
  3. set "folder=结果"
  4. md "%folder%" 2>nul
  5. powershell -NoProfile -ExecutionPolicy bypass ^
  6.     $files=@(dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Extension -eq '.xml')});^
  7.     $arr='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.toCharArray();^
  8.     for($i=0;$i -lt $files.length;$i++){^
  9.         write-host $files[$i].Name;^
  10.         $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  11.         $list=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  12.         $text=[IO.File]::ReadAllText($files[$i].FullName, [Text.Encoding]::UTF8);^
  13.         $m=[regex]::matches($text,'(?^<!^<Extra )name=\""([^^\""]+)\""');^
  14.         $newtext=$text;^
  15.         if($m.Count -ge 1){^
  16.             for($j=0;$j -lt $m.Count;$j++){^
  17.                 $kw=$m[$j].groups[1].value;^
  18.                 if(@('=','%%') -notcontains $kw){^
  19.                     if(-not $dic.ContainsKey($kw)){^
  20.                         $c=@(get-random -input $arr -count 3) -join '';^
  21.                         while($list.ContainsKey($c)){$c=@(get-random -input $arr -count 3) -join '';};^
  22.                         $list.add($c,'');^
  23.                         $newtext=$newtext.replace($m[$j].groups[0].value,'name=\"'+$c+'\"');^
  24.                         $dic.add($kw,$c);^
  25.                         $n++;^
  26.                     };^
  27.                 };^
  28.             };^
  29.             $k=@($dic.keys^|sort {$_.length} -des);^
  30.             $newtext=[regex]::replace($newtext,'(?^<==)\""[^^\""]+?\""',{param($a);$b=$a.value;foreach($it in $k){$b=$b.replace(('@'+$it),('@'+$dic[$it])).replace(('#'+$it),('#'+$dic[$it])).replace(($it+'.animation'),($dic[$it]+'.animation')).replace(($it+'.visibility'),($dic[$it]+'.visibility'));};$b});^
  31.             [IO.File]::WriteAllText(('%folder%\'+$files[$i].Name), $newtext, [Text.Encoding]::UTF8);^
  32.         };^
  33.     }
  34. pause
复制代码

TOP

回复 38# 523066680
是的 降低可读性并不能彻底阻断逆向 还需加密 有个矛盾在解读时就必然要提供个解密器 这是双向的
目前有一可用JAVA工具是不能适用包含数组的文本 所以另寻方法

TOP

本帖最后由 smss 于 2019-5-23 17:22 编辑

回复 39# zaqmlp
你给代码出错 导致测试手机无法开机 我没有说什么 又质疑这方法不行 而且问到你应该怎样改一个筛选条件都不说的 说的前提是加钱的(建议你以后加行代码加次价钱) 你上来说别和你扯这个 那请问不扯这个我花钱请你做什么 请不要在我的帖子下留言了

只怪自己问题没有解决就先打钱

TOP

回复 44# xczxczxcz
关键问题是不可能一下子知道全部要做具体哪些 只能说个大概 然后在发现问题的地方排查

TOP

回复 46# xczxczxcz 谷歌有混淆器的 这个大家都知道 也就不是什么秘密了 所以要写个不一样的

TOP

回复 49# WHY

谢谢你的注释 经过多次 修改调试 含数组的也可以正常工作了

现在只有一关联文本c中关联文本a中变量名,希望也同步替换,生成文本d
文本c特点如下 id="aper"  如果文本a中的 name="Paper"替换成了name="A" 那么文本c中id="Paper" 也需同步变更为id="A"
<Config>
<Group text="功能选项">
<CheckBox text="随机壁纸" summary="" id="Paper" default="1"/>
<CheckBox text="系统壁纸" summary="" id="Using" default="0"/>
</Group>
</Config>

希望得到你的答案

TOP

本帖最后由 smss 于 2019-6-1 17:08 编辑

回复 51# WHY

测试了一下 没能成功 生成的文本d就是复制了一个文本c

文本a以前缀#bg或@QQNC调用文本c对应名称id="bg"、id="QQNC" default=""中的值
例如文本a中含<Var name="bg" const="true" expression="ifelse(isnull(#bg),0,#bg)"/>
<Text name="Qm" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="@QQNC" marqueeSpeed="50" marqueeGap="2"/>
<Text name="Qm2" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="@QQQM" marqueeSpeed="50" marqueeGap="2"/>文本c如下<Config>
<Group text="─=≡Σ(((?つ??ω??)つ超人">
<StringInput text="昵称" id="QQNC" default="smss" />
<StringInput text="签名" id="QQQM" default="百年江湖,谁人与共." />
<CheckBox text="重力壁纸"  id="bg" default="0"/>
</Group>
</Config> 文本c中 关联名较少 如果不行就换个思路 不替换文本c中涉及的id="变量名" 仅获取文本c中id="变量名"将其设为文本a替换前的过滤条件

还有如何把<Text x="100" y="300" marqueeGap="2"/>变成<Text x="100"y="300"marqueeGap="2"/>去除中间所有空格只保留第一个空格 应该怎样改

TOP

本帖最后由 smss 于 2019-5-27 01:58 编辑

回复 56# netbenton

放弃吧
比对一下 会出现如下错误 如 name="sh" expression="#screen_height" 被替换成name="QHA" expression="#screen_height"

当出现@shqwfwdwe或@Shqwfwdwe这种将被替换@QHAqwfwdwe 它不判断大小写和完整字符

TOP

回复 61# Batcher 我是怕浪费了他的宝贵时间

TOP

本帖最后由 smss 于 2019-6-4 15:25 编辑

回复WHY
图1图2是a文件和b文件比对存在的问题 如果名称是A 替换成了B 当出现@AA或者@ABC时(且没有任何name="AA"与之关联时)会被替换成@BA或@BBC

图3是c文件和d文件比对存在的问题





如何批量删除src=""中.png.jpg.webp 及srcExp=""中.png.jpg.webp或+'.png'+'.jpg'+'.webp'同步变更目录下脚本中涉及的图片名称

<Image src="Ai/123.png" x="0" y="0"/>
<Image src="Ai/c.jpg" x="100" y="20"/>
<Image src="Ai/345.webp" x="1003" y="203"/>
<Image srcExp="'Ai/timing/'+ifelse(#start_pause==1,'Stop','count')+'.png'"/> 注意其中可能涉及变量名需要同步

方案A 改名称为A~ZZZZ之间
<Image src="Ai/A" x="0" y="0"/>
<Image src="Ai/B" x="100" y="20"/>
<Image src="Ai/C" x="1003" y="203"/>
<Image srcExp="'Ai/timing/'+ifelse(#start_pause==1,#A,#B)+'.png'"/>
方案B 仅删除后缀 但是需要规避重名 (如同时出现1.png和1.jpg时 删除后缀将导致重名冲突)
<Image src="Ai/123" x="0" y="0"/>
<Image src="Ai/c" x="100" y="20"/>
<Image src="Ai/345" x="1003" y="203"/>
<Image srcExp="'Ai/timing/'+ifelse(#start_pause==1,'Stop','count')"/>

还有我应该怎样改成 PowerShell "" 这样以BAT方式运行的 加了几个^有什么特殊的地方说明吗?
以下是目前的
  1. $global:n = 0; $Hash=@{};
  2. $str = [IO.File]::ReadAllText('manifest.xml',[Text.Encoding]::Default);
  3. #修改name属性的值,如果name属性值以music_prev或music_display或music_next等开头,或者节点名为Extra,则不修改
  4. $reg1 = '(?<=<(?!Extra)[^<>]*\sname=")(?!notice)(?!music_(?:prev|display|next|play|pause|album_cover))(?!notification_(?:icon|title|content|time|info|subtext|key|list))[^"]+(?=")';
  5. #如果command与target同时出现,command="play",则修改target属性值,
  6. $reg2 = '(?<=\starget=")[^"]+(?="[^<>]*\scommand="play)|(?<=\scommand="play[^<>]*\starget=") [^"]+(?=")';
  7. $str = [regex]::Replace($str, $reg1 + '|' + $reg2, {
  8.     param($m);
  9.     $key = $m.Value;
  10.     if( !$Hash.ContainsKey($key) ){
  11.         $x = [Math]::floor( $global:n / 26 );
  12.         if($x) { $chr1 = [char]( 64 + [int]$x ) } else { $chr1 = '' }
  13.         $Hash[$key] = $chr1 + [char]( 65 + $global:n++ % 26 );
  14.     }
  15.     $Hash[$key];
  16. })
  17. $arrKey = $Hash.Keys | sort -Desc {$_.Length};
  18. #如果属性值包含@#字符,或者属性值以 .animation或.visibility 结尾,则修改
  19. $str = [regex]::Replace($str, '(?<=")([^"@#]*[@#][^"]+|[^"]+(?:\.animation|\.visibility))(?=")', {
  20.     param($m);
  21.     $s = $m.Groups[1].Value;
  22.     forEach( $key In $arrKey ) {
  23.         $s = $s.Replace( '@' + $Key, '@' + $Hash[$Key] );
  24.         $s = $s.Replace( '#' + $Key, '#' + $Hash[$Key] );
  25.         $s = $s.Replace( $Key + '.animation', $Hash[$Key] + '.animation' );
  26.         $s = $s.Replace( $Key + '.visibility', $Hash[$Key] + '.visibility' );
  27.     }
  28.     $s;
  29. })
  30. [IO.File]::WriteAllText('manifest2.xml', $str, [Text.Encoding]::UTF8);
  31. $str = [IO.File]::ReadAllText('config.xml', [Text.Encoding]::Default);
  32. $str = [regex]::Replace($str, '(?<=\sid=")[^"]+(?=")', {param($m); if($Hash[$m.Value]){$Hash[$m.Value]}else{$m.Value}});
  33. [IO.File]::WriteAllText('config2.xml', $str, [Text.Encoding]::UTF8);
  34. echo 'Done';
  35. [Console]::ReadKey()
复制代码

TOP

返回列表