[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
1,只检查第一个等号是否是name="xxxxx",作为要改的名字,
2,所有@和#对应的字符串都会匹配更改
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "strFile=请拖入处理文本:"
  4. if not exist !strFile! (
  5. echo;"!strFile!" 文件不找不到!!
  6. exit /b
  7. )
  8. rem 定义用于命名的字符表
  9. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  10. set n=0
  11. (
  12. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  13. set s1=%%a
  14. set s2=%%b
  15. if "!s1:~-5!" == " name" (
  16. for /f "tokens=1*" %%c in ("%%b") do (
  17. call :getn !n! ss
  18. echo;!s1!="!ss!" %%d
  19. set $!n!=!ss!囧%%~c
  20. set /a n+=1
  21. )
  22. ) else (
  23. echo;!s1!=%%b
  24. )
  25. )
  26. ) >temp.txt
  27. set/a n-=1
  28. (
  29. for /f "tokens=*" %%a in (temp.txt) do (
  30. set str=%%a
  31. for /l %%1 in (0,1,!n!) do (
  32. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  33. set str=!str:@%%c=@%%b!
  34. set str=!str:#%%c=#%%b!
  35. )
  36. )
  37. echo;!str!
  38. )
  39. ) > 结果.txt
  40. type 结果.txt
  41. rem 查看有多少个更改
  42. set $
  43. pause
  44. exit /b
  45. :getn 计算临名字,可加上前缀
  46. set L=%1
  47. set l1=%1
  48. set %2=
  49. :loop
  50. set /a M=L %% 26
  51. set %2=!ASC:~%M%,1!!%2!
  52. if !L1! neq !L! set /a L=L/26&goto :loop
  53. goto :eof
复制代码

TOP

回复 27# smss
你试过这个会出现乱码?
后面加的过滤,改好了!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "strFile=请拖入处理文本:"
  4. if not exist !strFile! (
  5. echo;"!strFile!" 文件不找不到!!
  6. exit /b
  7. )
  8. rem 定义用于命名的字符表
  9. set ASC=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  10. set n=0
  11. rem 例外情况定义
  12. set exception=Extra
  13. (
  14. for /f "tokens=1* delims==" %%a in (!strFile!) do (
  15. set s1=%%a
  16. set s2=%%b
  17. if "!s1:%exception%=!!s1:~-5!" == "!s1! name" (
  18. for /f "tokens=1*" %%c in ("%%b") do (
  19. call :getn !n! ss
  20. set sa=%%~c
  21. rem 保留"."后面的尾巴
  22. if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
  23. echo;!s1!="!ss!" %%d
  24. set $!n!=!ss!囧%%~c
  25. set /a n+=1
  26. )
  27. ) else (
  28. echo;!s1!=%%b
  29. )
  30. )
  31. ) >temp.txt
  32. set/a n-=1
  33. (
  34. for /f "tokens=*" %%a in (temp.txt) do (
  35. set str=%%a
  36. for /l %%1 in (0,1,!n!) do (
  37. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  38. set str=!str:@%%c=@%%b!
  39. set str=!str:#%%c=#%%b!
  40. )
  41. )
  42. echo;!str!
  43. )
  44. ) > 结果.txt
  45. type 结果.txt
  46. rem 查看有多少个更改
  47. set $
  48. pause
  49. exit /b
  50. :getn 计算临名字,可加上前缀
  51. set L=%1
  52. set l1=%1
  53. set %2=
  54. :loop
  55. set /a M=L %% 26
  56. set %2=!ASC:~%M%,1!!%2!
  57. if !L1! neq !L! set /a L=L/26&goto :loop
  58. goto :eof
复制代码
1

评分人数

TOP

本帖最后由 netbenton 于 2019-5-23 16:11 编辑

1,编码问题已经解决,批处理文本和要处理的文本必须是使用相同的编码
2,多出的“=“号问题已经解决
3,可指定例外固定的字符串列表
  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. for /f "tokens=1*" %%c in ("%%b") do (
  26. if defined #%%~c (
  27. echo;!s1!="!#%%~c!" %%d
  28. ) else (
  29. call :getn !n! ss
  30. set sa=%%~c
  31. rem 保留"."后面的尾巴
  32. if "!sa:.=!" neq "!sa!" set ss=!ss!.!sa:*.=!
  33. echo;!s1!="!ss!" %%d
  34. set $!n!=!ss!囧%%~c
  35. set #%%~c=!ss!
  36. set /a n+=1
  37. )
  38. )
  39. ) else (
  40. if defined s2 (echo;!s1!=%%b) else (echo;!s1!)
  41. )
  42. )
  43. ) >temp.txt
  44. set/a n-=1
  45. (
  46. for /f "tokens=*" %%a in (temp.txt) do (
  47. set str=%%a
  48. for /l %%1 in (0,1,!n!) do (
  49. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  50. set str=!str:@%%c=@%%b!
  51. set str=!str:#%%c=#%%b!
  52. )
  53. )
  54. echo;!str!
  55. )
  56. ) > 结果.txt
  57. type 结果.txt
  58. rem 查看有多少个更改
  59. set $
  60. pause
  61. exit /b
  62. rem 计算临名字,可加上前缀
  63. :getn
  64. (set L=%1
  65. set M=%1
  66. set %2=)
  67. :loop
  68. set /a M=L %% 26
  69. set %2=!%2!!ASC:~%M%,1!
  70. if !M! neq !L! set /a L=L/26&goto :loop
  71. goto :eof
复制代码

TOP

  1. <Text name="QA">
复制代码
找到出现替换错误的原因了,"QA"之后不是空格,而是其它字符的时,会出错,以下代码已经处理好
  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;!s1!="!#%%~c!" %%d
  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=*" %%a in (temp.txt) do (
  48. set str=%%a
  49. for /l %%1 in (0,1,!n!) do (
  50. for /f "tokens=1,2 delims=囧" %%b in ("!$%%1!") do (
  51. set str=!str:@%%c=@%%b!
  52. set str=!str:#%%c=#%%b!
  53. )
  54. )
  55. echo;!str!
  56. )
  57. ) > 结果.txt
  58. type 结果.txt
  59. rem 查看有多少个更改
  60. set $
  61. pause
  62. exit /b
  63. rem 计算临名字,可加上前缀
  64. :getn
  65. (set L=%1
  66. set M=%1
  67. set %2=)
  68. :loop
  69. set /a M=L %% 26
  70. set %2=!%2!!ASC:~%M%,1!
  71. if !M! neq !L! set /a L=L/26&goto :loop
  72. goto :eof
复制代码

TOP

回复 52# smss

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

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

数组也可以处理了。
终于全部搞好了,连特殊符号“!”号也处理好了!!!
  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

回复 55# xczxczxcz


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

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

返回列表