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

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

本帖最后由 smss 于 2019-6-26 11:23 编辑

具体报酬:100元人民币
支付方式:支付宝微信转账
联系方式:QQ296578353
有效期限:功能实现之前

批量替换文本中的指定内容 文本类似以下
<Variable name="city_id" type="string" column="city_id"/>
<Variable name="weather_location" type="string" column="city_name"/>
<Variable name="weather_id" type="int" column="weather_type"/>
<Variable name="city_id" type="string" column="city_id"/>

<Text name="Qm" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="@city_id" marqueeSpeed="50" marqueeGap="2"/>
<Text name="QW" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="#weather_location" marqueeSpeed="50" marqueeGap="2"/>
<Text name="QA" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="#weather_id+#city_id" marqueeSpeed="50" marqueeGap="2"/>
需要把文本中
name="city_id"替换成name="A" name="weather_location"替换成name="B"以此类推顺序是从上到下 把每一个name=""中的名称替换为A B C D...如果超26字母那么就以AA AB AC...AAA AAB AAC...这种命名或类似你能想到不重名的方式来命名(但需要规避运算符号 如把一个名称替换成了*那么后边调用这个变量时就面临一个致命问题 #*+#-  使得代入不了运算  因此名称中不要出现运算符号 需要规避符号 +,-,*,/,%,**,|,||,=,==, !,not)
注意:如果名称出现2次以上 如name="city_id" 也需要把name="city_id"替换为name="A" 后续文本中如有关联那么也需要同步变更 特点是会在变量名前加#或@如下例子
希望得到如下文本
<Variable name="A" type="string" column="city_id"/>
<Variable name="B" type="string" column="city_name"/>
<Variable name="C" type="int" column="weather_type"/>
<Variable name="A" type="string" column="city_id"/>
<Text name="D" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="@A" marqueeSpeed="50" marqueeGap="2"/>
<Text name="E" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="#B" marqueeSpeed="50" marqueeGap="2"/>
<Text name="F" x="100" y="300" w="458" alignV="center" color="#ababab" size="30" textExp="#C+#A" marqueeSpeed="50" marqueeGap="2"/>

注意textExp不是固定调用以上变量名的 x="100" y="300" color="#ababab" size="30" 都可以调用 如x="#city_id" 需要变更为x="#A"

1实现替换name="" 中名称,使其变为无意义的字母或其它任何你知道的不重名的方式 让他人无法根据名称直接得知用途
2如果一个名称多次出现如下相同名称 那么需要替换成相同名称

<VariableCommand name="time_count" type="number[]" index="0" expression="0" />
<VariableCommand name="time_count" type="number[]" index="1" expression="0" />
<VariableCommand name="time_count" type="number[]" index="2" expression="0" />
<VariableCommand name="time_count" type="number[]" index="3" expression="0" />
变成
<VariableCommand name="B" type="number[]" index="0" expression="0" />
<VariableCommand name="B" type="number[]" index="1" expression="0" />
<VariableCommand name="B" type="number[]" index="2" expression="0" />
<VariableCommand name="B" type="number[]" index="3" expression="0" />
3如果name="tms0" 变成name="A"后续调用时 如#tms0或@tms0要同步这个名称变为#A @A

以下文本测试时使用
  1. <Group x="540" y="483" w="#tms_w" align="center" pivotX="#tms_w/2" pivotY="0" scale="ifelse(#time_hour0}0,0.85,1)">
  2. <!-- 小时 -->
  3. <Time name="tms0" x="0" y="0" src="ToolsScreen_src/timing/number/number.png" space="2" formatExp="ifelse(#time_hour0}0,#time_hour0,'')+#time_hour1+#time_hour2+':'" visibility="(#time_hour0+#time_hour1+#time_hour2)}0"/>
  4. <!-- 分钟 : 秒 -->
  5. <Time name="tms1" x="#tms0.bmp_width" y="0" src="ToolsScreen_src/timing/number/number.png" space="2" formatExp="#time_minute1+#time_minute2+':'+#time_second1+#time_second2" />
  6. <!-- 毫秒 -->
  7. <Time name="milis1" x="#tms0.bmp_width+#tms1.bmp_width" y="0" src="ToolsScreen_src/timing/number/number.png" space="2" formatExp="'.'+#time_millisecond1+#time_millisecond2" />
  8. </Group>
  9. <Text x="540" y="425" align="center" size="30" color="#ffffff" text="最多计数4次哦" visibility="#timing_count==5" alpha="510*#start_ani"/>
  10. </Group>
  11. </Group>
  12. <Var name="time_count" type="number[]" size="4" const="true"/>
  13. <!-- #count_y_ani/2.06 -->
  14. <Array x="0" y="0+100*(1-#start_ani)+200-#count_y_ani/2.06" count="4" indexName="__count" alpha="510*#start_ani">
  15. <Group y="103*#__count" visibility="#__count{#timing_count*#start_ani">
  16. <!-- 序号 0-4 -->
  17. <Text x="245" y="984" size="27" color="#ffffff" textExp="'0'+int(#__count+1)"/>
  18. <!-- + 00:00.00 上次计时到本次间隔时间 -->
  19. <!-- <Text x="585" y="980" align="right" size="34" color="#ffffff" textExp="'+ '+'00:00.00'" alpha="180"/> -->
  20. <Text x="585" y="980" align="right" size="34" color="#ffffff" textExp="'+ '+int((#time_count[#__count]-#time_count[#__count-1])/1000%3600/60/10)+int((#time_count[#__count]-#time_count[#__count-1])/1000%3600/60%10)+':'+int((#time_count[#__count]-#time_count[#__count-1])/1000%60/10)+int((#time_count[#__count]-#time_count[#__count-1])/1000%60%10)+'.'+int((#time_count[#__count]-#time_count[#__count-1])/100%10)+int((#time_count[#__count]-#time_count[#__count-1])/10%10)" alpha="180"/>
  21. <!-- 本次计时时间:上次结束的时间+本次计次时间 -->
  22. <!-- <Text x="840" y="980" align="right" size="34" color="#ffffff" textExp="'02:30.25'" /> -->
  23. <Text x="840" y="980" align="right" size="34" color="#ffffff" textExp="int(#time_count[#__count]/1000%3600/60/10)+int(#time_count[#__count]/1000%3600/60%10)+':'+int(#time_count[#__count]/1000%60/10)+int(#time_count[#__count]/1000%60%10)+'.'+int(#time_count[#__count]/100%10)+int(#time_count[#__count]/10%10)"/>
  24. <Rectangle x="239" y="1047-1" w="646" h="2" fillColor="#ffffff" alpha="25" />
  25. </Group>
  26. </Array>
  27. <Var name="start_ani">
  28. <VariableAnimation name="startAni" initPause="true" loop="false">
  29. <AniFrame value="0" time="0" easeType="QuadEaseOut"/>
  30. <AniFrame value="1" time="300" easeType="QuadEaseOut"/>
  31. <AniFrame value="0" time="600" />
  32. <Triggers>
  33. <Trigger action="end" condition="#startAni.current_frame==600">
  34. <VariableCommand name="start_on" expression="0" persist="true"/>
  35. <VariableCommand name="start_pause" expression="0" persist="true"/>
  36. <VariableCommand name="time_count" type="number[]" index="0" expression="0" />
  37. <VariableCommand name="time_count" type="number[]" index="1" expression="0" />
  38. <VariableCommand name="time_count" type="number[]" index="2" expression="0" />
  39. <VariableCommand name="time_count" type="number[]" index="3" expression="0" />
  40. <VariableCommand name="timing_count" expression="0" persist="true" />
  41. </Trigger>
  42. </Triggers>
  43. </VariableAnimation>
  44. </Var>
  45. <Var name="count_y_ani">
  46. <VariableAnimation initPause="true" loop="false">
  47. <AniFrame value="#count_y_ani" time="0" easeType="QuadEaseOut"/>
  48. <AniFrame value="min(#timing_count,4)*103" time="300" easeType="QuadEaseOut"/>
  49. <AniFrame value="0" time="800"/>
  50. </VariableAnimation>
  51. </Var>
  52. <Group x="0" y="#count_y_ani/4.12" >
  53. <!-- 计次/停止(重置) -->
  54. <Image x="540-130*#start_ani" y="1420" pivotX="78" pivotY="78" align="center" alignV="center"  srcExp="'ToolsScreen_src/timing/'+ifelse(#start_pause==1,'Stop','count')+'.png'" visibility="#start_on==1"/>
  55. <Button x="540-130*#start_ani" y="1420" w="156" h="156" visibility="#start_on==1" align="center" alignV="center">
  56. <Pressed>
  57. <Image x="540-130*#start_ani" y="1420" src="ToolsScreen_src/timing/pressed.png" alpha="30" align="center" alignV="center"/>
  58. </Pressed>
  59. <Triggers>
  60. <!-- 计次 -->
  61. <Trigger action="up" condition="#start_pause==0">
  62. <VariableCommand name="timing_count" expression="min(#timing_count+1,5)" persist="true" />
  63. <VariableCommand name="time_count" type="number[]" index="#timing_count-1" expression="#Time_total" persist="true"/>
  64. <AnimationCommand target="count_y_ani" command="play(0,300)" />
  65. <VariableCommand name="time_count0" expression="#time_count[0]" persist="true"/>
  66. <VariableCommand name="time_count1" expression="#time_count[1]" persist="true"/>
  67. <VariableCommand name="time_count2" expression="#time_count[2]" persist="true"/>
  68. <VariableCommand name="time_count3" expression="#time_count[3]" persist="true"/>
  69. </Trigger>
  70. <!-- 停止(重置) -->
  71. <Trigger action="up" condition="#start_pause==1">
  72. <AnimationCommand target="count_y_ani" command="play(300,800)" />
  73. <AnimationCommand target="clock_minute_ani" command="play(0,500)" condition="#clock_minute_ani==0"/>
  74. <AnimationCommand target="start_ani" command="play(300,600)" condition="#start_ani==1"/>
  75. </Trigger>
  76. </Triggers>
  77. </Button>
  78. <!-- 开始/继续/暂停 -->
  79. <Image x="540+130*#start_ani" y="1420" pivotX="78" pivotY="78" align="center" alignV="center" srcExp="'ToolsScreen_src/timing/'+ifelse(#start_on==0||#start_pause==1,'start','pause')+'.png'" />
  80. <Button x="540+130*#start_ani" y="1420" w="156" h="156" align="center" alignV="center" >
  81. <Pressed>
  82. <Image x="540+130*#start_ani" y="1420" src="ToolsScreen_src/timing/pressed.png" align="center" alignV="center" alpha="30"/>
  83. </Pressed>
  84. <Triggers>
  85. <!-- 开始 -->
  86. <Trigger action="up" condition="#start_on==0">
  87. <VariableCommand name="start_on" expression="1" persist="true" delay="10"/>
  88. <VariableCommand name="Start_timing" expression="#time_sys" persist="true"/>
  89. <VariableCommand name="Time_total" expression="0" persist="true" />
  90. <AnimationCommand target="start_ani" command="play(0,300)" condition="#start_ani==0"/>
  91. </Trigger>
  92. <Trigger action="up" condition="#start_on==1">
  93. <!-- 继续 -->
  94. <VariableCommand name="Start_timing" expression="#time_sys" persist="true" condition="#start_pause==1"/>
  95. <!-- 暂停 -->
  96. <VariableCommand name="Time_total_pause" expression="#Time_total" persist="true" condition="#start_pause==0"/>
  97. <VariableCommand name="start_pause" expression="int(#start_pause+1)%2" persist="true" />
  98. </Trigger>
  99. </Triggers>
  100. </Button>
  101. <!-- 返回按钮 -->
  102. <Image x="540" y="1700" src="ToolsScreen_src/back.png" align="center" alignV="center" touchable="true" alpha="170+50*#back_flag">
  103. <Triggers>
  104. <Trigger action="down">
  105. <VariableCommand name="back_flag" expression="1"/>
  106. </Trigger>
  107. <Trigger action="up">
  108. <VariableCommand name="back_flag" expression="0"/>
  109. <AnimationCommand target="init_tools_ani" command="play(800,0)"  condition="#init_tools_ani==1"/>
  110. </Trigger>
  111. </Triggers>
  112. </Image>
  113. </Group>
  114. <Button w="1080" h="#screen_height" interceptTouch="true"/>
  115. </Group>
复制代码

名字怕重复可以用 MD5 啊。

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

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

TOP

回复 59# smss


兄弟,你可不能劝人放弃啊
请坚信:这个论坛里面绝大部分人写代码不是为了挣钱
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 59# smss
1,加入了区分大小写
2,加入了完整词检查
3,加入了多种位置变量的替换,自己可以根据情况添加
  1. goto :ansi
  2. rem UTF-8 编码支持
  3. chcp 65001
  4. cls
  5. :ansi
  6. @echo off
  7. set /p "strFile=请拖入处理文本:"
  8. setlocal enabledelayedexpansion
  9. if not exist !strFile! (
  10. echo;"!strFile!" 文件不找不到!!
  11. exit /b
  12. )
  13. endlocal
  14. rem 定义用于命名的字符表
  15. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  16. set n=0
  17. rem 定义可用于命名的字符表
  18. set tab="." [ + - ^"
  19. rem 例外情况定义
  20. set exception=Extra Button
  21. set z=
  22. set o=
  23. setlocal enabledelayedexpansion
  24. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  25. for /f "tokens=1,2 delims= " %%K in ("1 !z!") do (
  26. endlocal
  27. set z=%%L
  28. set s1=%%a
  29. set s2=%%b
  30. setlocal enabledelayedexpansion
  31. )
  32. if defined z for %%k in (%exception%) do (
  33. if "#!s1:</%%k>=!" neq "#!s1!" (
  34. set z=!z:~1!
  35. )
  36. )
  37. for %%k in (%exception%) do (
  38. if "!s1:<%%k=!" neq "!s1!" (
  39. if "#!s2:/>=!" equ "#!s2!" (
  40. set z=!z!y
  41. ) else (
  42. set o=o
  43. )
  44. )
  45. )
  46. if "!o!!z!!s1:~-5!" equ " name" (
  47. set s3=!s2:^"= !
  48. for /f "tokens=1 delims= " %%c in ("!s3!") do (
  49. if not defined #%%~c (
  50. call :getn !n! ss
  51. set sa=%%~c
  52. rem 保留"."后面的尾巴
  53. if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
  54. for /f "tokens=1,2,3 delims= " %%x in ("!n! !ss! !z!") do (
  55. endlocal
  56. set $%%x=%%y囧%%~c
  57. set #%%~c=%%y
  58. set /a n+=1
  59. set z=%%z
  60. setlocal enabledelayedexpansion
  61. )
  62. )
  63. )
  64. )
  65. )
  66. set/a n-=1
  67. (
  68. for /f "tokens=1,*" %%a in (!strFile!) do (
  69. endlocal
  70. set stra=%%a
  71. set str=%%b
  72. setlocal enabledelayedexpansion
  73. if defined str (
  74. set "str=!stra! !str: =!"
  75. for /l %%1 in (0,1,%n%) do (
  76. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  77. if "!str:%%c=!" neq "!str!" (
  78. if "!str:%%c=%%c!" equ "!str!" (
  79. set str=!str:"%%c"="%%b"!
  80. set str=!str:"@%%c"="@%%b"!
  81. set str=!str:"#%%c"="#%%b"!
  82. if "!str:*%%c=!" neq "!str!" (
  83. call :parti %%c %%b
  84. )
  85. ))
  86. )
  87. )
  88. ) else (
  89. set str=%%a
  90. )
  91. echo;!str!
  92. )
  93. ) >结果.txt
  94. start 结果.txt
  95. rem 查看有多少个更改
  96. set $
  97. pause
  98. exit /b
  99. rem 计算临名字,可加上前缀,多个,A 到 ZZZZ 多个
  100. :getn
  101. (set L=%1
  102. set M=%1
  103. set %2=)
  104. :loop
  105. set /a M=L %% 26
  106. set %2=!%2!!ASC:~%M%,1!
  107. if !M! neq !L! set /a L=L/26&goto :loop
  108. goto :eof
  109. rem 非双引号位置处理 如:#xxxx+  #xxxx[  ]  #xxxx.dir  
  110. :parti
  111. for %%a in (!tab!) do (
  112. if "!str:%1%%~a=!" neq "!str!" (
  113. if "!str:%1%%~a=%1%%~a!" equ "!str!" (
  114. set str=!str:@%1%%~a=@%2%%~a!
  115. set str=!str:#%1%%~a=#%2%%~a!
  116. if "!str:*%1=!" equ "!str!" (
  117. goto :partiE
  118. )
  119. )
  120. )
  121. )
  122. :partiE
  123. goto :eof
复制代码

TOP

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

回复 56# netbenton

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

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

TOP

回复 56# netbenton


    代码风格看着舒服…
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 55# xczxczxcz


    我觉得批处理也可以做得到

TOP

数组也可以处理了。
终于全部搞好了,连特殊符号“!”号也处理好了!!!
  1. goto :ansi
  2. rem UTF-8 编码支持
  3. chcp 65001
  4. cls
  5. :ansi
  6. @echo off
  7. set /p "strFile=请拖入处理文本:"
  8. setlocal enabledelayedexpansion
  9. if not exist !strFile! (
  10. echo;"!strFile!" 文件不找不到!!
  11. exit /b
  12. )
  13. endlocal
  14. rem 定义用于命名的字符表
  15. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  16. set n=0
  17. rem 例外情况定义
  18. set exception=Extra Button
  19. set z=
  20. set o=
  21. setlocal enabledelayedexpansion
  22. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  23. for /f "tokens=1,2 delims= " %%K in ("1 !z!") do (
  24. endlocal
  25. set z=%%L
  26. set s1=%%a
  27. set s2=%%b
  28. setlocal enabledelayedexpansion
  29. )
  30. if defined z for %%k in (%exception%) do (
  31. if "#!s1:</%%k>=!" neq "#!s1!" (
  32. set z=!z:~1!
  33. )
  34. )
  35. for %%k in (%exception%) do (
  36. if "!s1:<%%k=!" neq "!s1!" (
  37. if "#!s2:/>=!" equ "#!s2!" (
  38. set z=!z!y
  39. ) else (
  40. set o=o
  41. )
  42. )
  43. )
  44. if "!o!!z!!s1:~-5!" equ " name" (
  45. set s3=!s2:^"= !
  46. for /f "tokens=1 delims= " %%c in ("!s3!") do (
  47. if not defined #%%~c (
  48. call :getn !n! ss
  49. set sa=%%~c
  50. rem 保留"."后面的尾巴
  51. if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
  52. for /f "tokens=1,2,3 delims= " %%x in ("!n! !ss! !z!") do (
  53. endlocal
  54. set $%%x=%%y囧%%~c
  55. set #%%~c=%%y
  56. set /a n+=1
  57. set z=%%z
  58. setlocal enabledelayedexpansion
  59. )
  60. )
  61. )
  62. )
  63. )
  64. set/a n-=1
  65. (
  66. for /f "tokens=1,*" %%a in (!strFile!) do (
  67. endlocal
  68. set stra=%%a
  69. set str=%%b
  70. setlocal enabledelayedexpansion
  71. if defined str (
  72. set "str=!stra! !str: =!"
  73. for /l %%1 in (0,1,%n%) do (
  74. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  75. set str=!str:"%%c"="%%b"!
  76. set str=!str:@%%c=@%%b!
  77. set str=!str:#%%c=#%%b!
  78. )
  79. )
  80. ) else (
  81. set str=%%a
  82. )
  83. echo;!str!
  84. )
  85. ) > 结果.txt
  86. start 结果.txt
  87. rem 查看有多少个更改
  88. set $
  89. pause
  90. exit /b
  91. rem 计算临名字,可加上前缀,多个,A 到 ZZZZ 多个
  92. :getn
  93. (set L=%1
  94. set M=%1
  95. set %2=)
  96. :loop
  97. set /a M=L %% 26
  98. set %2=!%2!!ASC:~%M%,1!
  99. if !M! neq !L! set /a L=L/26&goto :loop
  100. goto :eof
复制代码

TOP

回复 54# netbenton


    以前偶用纯P写的时候,经常前面设好的坑到后面忘记填坑。唉。现在一些旧的脚本还保留着原P外,新的一律用PS写。用P写的时候经常要用硬盘做临时存储交换。特别是有特殊符号时。现在基本只用内存交换。
《题外话。自从用了win10后,我已经坏了两块机械硬盘。因为读盘比以前的系统更利害了。SSD倒是5年了还正常。Windows Defender 已禁止它随意乱动。》

----------现在看到用纯P写长脚本时就有一种莫明恐惧感!

TOP

除了数组,其它的做解决了~~~
  1. goto :ansi
  2. rem UTF-8 编码支持
  3. chcp 65001
  4. cls
  5. :ansi
  6. @echo off
  7. setlocal enabledelayedexpansion
  8. set /p "strFile=请拖入处理文本:"
  9. if not exist !strFile! (
  10. echo;"!strFile!" 文件不找不到!!
  11. exit /b
  12. )
  13. rem 定义用于命名的字符表
  14. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  15. set n=0
  16. rem 例外情况定义
  17. set exception=Extra Button
  18. (
  19. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  20. set s1=%%a
  21. set s2=%%b
  22. set z=
  23. for %%k in (%exception%) do (if "!s1:%%k=!" neq "!s1!" (set z=y))
  24. if "!z!!s1:~-5!" equ " name" (
  25. set s3=!s2:^"= !
  26. for /f "tokens=1 delims= " %%c in ("!s3!") do (
  27. if defined #%%~c (
  28. echo;%%a=%%b
  29. ) else (
  30. call :getn !n! ss
  31. set sa=%%~c
  32. rem 保留"."后面的尾巴
  33. if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
  34. echo;!s1!="!ss!" %%d
  35. set $!n!=!ss!囧%%~c
  36. set #%%~c=!ss!
  37. set /a n+=1
  38. )
  39. )
  40. ) else (
  41. if defined s2 (echo;!s1!=%%b) else (echo;!s1!)
  42. )
  43. )
  44. ) >temp.txt
  45. set/a n-=1
  46. (
  47. for /f "tokens=1,*" %%a in (temp.txt) do (
  48. set str=%%b
  49. if defined str (set str=%%a !str: =!) else set str=%%a
  50. for /l %%1 in (0,1,!n!) do (
  51. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  52. set str=!str:"%%c"="%%b"!
  53. set str=!str:@%%c=@%%b!
  54. set str=!str:#%%c=#%%b!
  55. )
  56. )
  57. echo;!str!
  58. )
  59. ) > 结果.txt
  60. start 结果.txt
  61. rem 查看有多少个更改
  62. set $
  63. pause
  64. exit /b
  65. rem 计算临名字,可加上前缀,A-Z,AA-ZZ,AAA-ZZZ,AAAA-ZZZZ ……
  66. :getn
  67. (set L=%1
  68. set M=%1
  69. set %2=)
  70. :loop
  71. set /a M=L %% 26
  72. set %2=!%2!!ASC:~%M%,1!
  73. if !M! neq !L! set /a L=L/26&goto :loop
  74. goto :eof
复制代码

TOP

回复 52# smss

这两个比较容易实现,BAT也可以做到,关于需要过滤固定数组的地方有没有举例的文本?

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

本帖最后由 WHY 于 2019-5-25 12:45 编辑

回复 50# smss


    在 echo 'Done' 上面,插入三行:
  1. $str = [IO.File]::ReadAllText('c.txt', [Text.Encoding]::Default);
  2. $str = [regex]::Replace($str, '(?<=\sid=")[^"]+(?=")', {param($m); if($Hash[$m.Value]){$Hash[$m.Value]}else{$m.Value}});
  3. [IO.File]::WriteAllText('d.txt', $str, [Text.Encoding]::UTF8);
复制代码

TOP

返回列表