Board logo

标题: [文本处理] 批处理汉字转拼音 [打印本页]

作者: ibm    时间: 2009-4-24 19:05     标题: 批处理汉字转拼音

此脚本的功能是将中文转换成拼音,做成了类似第三方程序的形式,
可以将汉字转换成全拼或只保留每个汉字拼音的首字母。
附件中是字典,此脚本需要《字典》的支持。
  1. @ECHO OFF
  2. Rem XXXXXXXXXXXXXXXXXXXXXXXX 参数整理 XXXXXXXXXXXXXXXXXXXXXXXX
  3. SET "Parameter=%*"
  4. IF NOT DEFINED Parameter (
  5.   CALL :HELP
  6.   PAUSE 1>NUL
  7.   CALL :EXPORT && EXIT /B 1
  8. ) ELSE (
  9.   ECHO [%Parameter%] | FIND /I "?" 1>NUL && ( CALL :HELP && CALL :EXPORT && EXIT /B 1 )
  10.   )
  11. SET "Parameter1="&&SET "Parameter2="&&SET "Parameter3="&&SET "Parameter4="&&SET "Parameter5="
  12. :Parameter
  13. SET "Parameter=%~1"
  14.     REM ECHO 00140-[%Parameter%]
  15. IF NOT DEFINED Parameter GOTO EndParameter
  16. %Parameter1% IF /I "%Parameter:~0,7%" EQU "Chinese" ( SET "Chinese=%Parameter:~8%" && SET "Parameter1=Rem" ) && GOTO IFParameter
  17. %Parameter2% IF /I "%Parameter:~0,6%" EQU "Return" ( SET "Return=%Parameter:~7%" && SET "Parameter2=Rem" ) && GOTO IFParameter
  18. %Parameter3% IF /I "%Parameter:~0,8%" EQU "WordBook" ( SET "WordBook=%Parameter:~9%" && SET "Parameter3=Rem" ) && GOTO IFParameter
  19. %Parameter4% IF /I "%Parameter:~1%" EQU "QP" ( SET "QP=%Parameter:~1%" && SET "Parameter4=Rem" ) && GOTO IFParameter
  20. %Parameter5% IF /I "%Parameter:~1%" EQU "SZ" ( SET "SZ=%Parameter:~1%" && SET "Parameter5=Rem" ) && GOTO IFParameter
  21. ECHO. && CALL :ERROR "%Parameter%" && CALL :EXPORT && EXIT /B 12
  22. :IFParameter
  23. SHIFT /1
  24. GOTO Parameter
  25. :EndParameter
  26. IF DEFINED QP ( IF DEFINED SZ ( CALL :ERROR "QO与SZ不可同时存在" &&CALL :EXPORT && EXIT /B 13 & EXIT /B 13 ) )
  27. ::测试时显显示各参数的值
  28. IF 1 LSS 0 (
  29.   ECHO 1.中文字符串 Chinese=%Chinese%
  30.   ECHO 2.输出返回值 Return=%Return%
  31.   ECHO 3.字典路径  WordBook=%WordBook%
  32.   ECHO 4.QP:    [%QP%]
  33.   ECHO 5.SZ:    [%SZ%]
  34.   PAUSE
  35. )
  36. Rem XXXXXXXXXXXXXXXXXXXXXXXX 准备 XXXXXXXXXXXXXXXXXXXXXXXX
  37. Rem 字典路径
  38. :WORDBOOK0
  39. IF EXIST %WORDBOOK% GOTO WORDBOOK1
  40. ECHO.&&ECHO.&&ECHO.&&ECHO.
  41. ECHO.请输入《字典》所在路径:
  42. ECHO.[Q]:退出
  43. ECHO.
  44. SET "WORDBOOK="
  45. SET /P WORDBOOK=
  46. IF /I "%WORDBOOK%" EQU "Q" ( CALL :EXPORT && EXIT /B 1 & EXIT /B 1 )
  47. IF EXIST "%WORDBOOK%" GOTO WORDBOOK1
  48. IF EXIST "%WORDBOOK%.TXT" ( SET "WORDBOOK=%WORDBOOK%.TXT" && GOTO WORDBOOK1 )
  49. ECHO.
  50. CALL :ERROR "输入错误或没有找到字典"
  51. ECHO.
  52. GOTO WORDBOOK0
  53. :WORDBOOK1
  54. Rem XXXXXXXXXXXXXXXXXXXXXXXX 中文转拼音 XXXXXXXXXXXXXXXXXXXXXXXX
  55. IF DEFINED SZ ( SET "REMSZ=" ) ELSE ( SET "REMSZ=REM" )
  56. :StartMain
  57. SET "VARIABLE=%Chinese:~,1%"
  58. IF /I "%VARIABLE%" EQU " " ( SET "OUTPUT= " && GOTO ENDOUTPUT3 )
  59. IF /I "%VARIABLE%" EQU " " ( SET "OUTPUT= " && GOTO ENDOUTPUT3 )
  60. IF NOT DEFINED Chinese GOTO EndMain
  61. FOR /F "EOL=; TOKENS=1,*" %%I IN ( 'TYPE %WORDBOOK%' ) DO (
  62.   IF "%VARIABLE%" EQU "%%~I" (
  63.     SET "OUTPUT=%%~J"
  64.         REM 当条件成立后即退出此 “For %%I” 的循环?
  65.   )
  66. )
  67. IF DEFINED OUTPUT GOTO ENDOUTPUT1
  68. ECHO 在字典中,没有找到“%VARIABLE%”的拼音
  69. ECHO 请手动输入该字的拼音:
  70. ECHO [回车]:跳过
  71. ECHO.
  72. SET "OUTPUT="
  73. SET /P OUTPUT=.  %VARIABLE%:
  74. ECHO.
  75. IF NOT DEFINED OUTPUT GOTO ENDOUTPUT3
  76. :ENDOUTPUT1
  77. ECHO [%OUTPUT%] | FIND /I "&" 1>NUL || GOTO ENDOUTPUT2
  78. ECHO.
  79. ECHO 字符串 [ %Chinese% ] 中的“%VARIABLE%”为多音字,
  80. ECHO 请手动输入该字的拼音:
  81. ECHO [回车]:跳过
  82. ECHO.
  83. SET "OUTPUT="
  84. SET /P OUTPUT=.  %VARIABLE%:
  85. ECHO.
  86. IF NOT DEFINED OUTPUT GOTO ENDOUTPUT3
  87. :ENDOUTPUT2
  88. %REMSZ% SET "OUTPUT=%OUTPUT:~0,1%"
  89. :ENDOUTPUT3
  90. SET "OPPY=%OPPY%%OUTPUT%"
  91. SET "OUTPUT="
  92. SET "Chinese=%Chinese:~1%"
  93. GOTO StartMain
  94. :EndMain
  95.     REM ECHO -[%OPPY%]-
  96. SET "%Return%=%OPPY%"
  97.     REM ECHO [%Return%][%OPPY%]
  98. CALL :EXPORT
  99. EXIT /B 0
  100. Rem XXXXXXXXXXXXXXXXXXXXXXXX 帮助 XXXXXXXXXXXXXXXXXXXXXXXX
  101. :HELP
  102. ECHO.
  103. ECHO CtoP.bat 汉字转拼音 by Bo (IBM)   [20090424]
  104. ECHO   通过字典(WORDBOOK.txt)查找对应的拼音,
  105. ECHO   用户可以手动修改字典中的拼音
  106. ECHO   支持阿拉伯数字转拼音
  107. ECHO   遇到多音字或字典中未收录的文字,
  108. ECHO   程序会暂停执行,并要求用户手动输入
  109. ECHO.
  110. ECHO 用法:
  111. ECHO %~NX0 "Chinese-String" Return-Variable [WordBook-PATH] [/QP ^| /SZ]
  112. ECHO.
  113. ECHO   参数说明:
  114. ECHO.
  115. ECHO   String: 中文字符串
  116. ECHO   Variable:输出返回值变量
  117. ECHO   PATH:  字典路径
  118. ECHO   /QP:   全拼(默认)
  119. ECHO   /SZ:   简拼(首字母)
  120. ECHO.
  121. ECHO  部分特殊字符及标点不支持 
  122. ECHO.
  123. ECHO.
  124. GOTO :EOF
  125.     REM ERRORLEVEL 0  正常执行转化后退出
  126.     REM ERRORLEVEL 0  正常执行未转化退出
  127.     REM ERRORLEVEL 11  参数不匹配
  128.     REM ERRORLEVEL 12  QP 与 SZ 不可同时存在
  129. Rem XXXXXXXXXXXXXXXXXXXXXXXX 报错 XXXXXXXXXXXXXXXXXXXXXXXX
  130. :ERROR
  131. SET "ERRORNUM=%~1"
  132. ECHO.&&ECHO.
  133. COLOR 0C
  134. ECHO   错误:%ERRORNUM%
  135. ECHO.
  136. PAUSE
  137. ECHO.
  138. COLOR 1F
  139. GOTO :EOF
  140. Rem XXXXXXXXXXXXXXXXXXXXXXXX 出口 XXXXXXXXXXXXXXXXXXXXXXXX
  141. :EXPORT
  142. SET "Parameter="
  143. SET "Parameter1="
  144. SET "Parameter2="
  145. SET "Parameter3="
  146. SET "Parameter4="
  147. SET "Parameter5="
  148. SET "Chinese="
  149. SET "Return="
  150. SET "WordBook="
  151. SET "QP="
  152. SET "SZ="
  153. SET "ERRORNUM="
  154. SET "VARIABLE="
  155. SET "OPPY="
  156. ECHO.&&ECHO.
  157. GOTO :EOF
复制代码
链接: https://pan.baidu.com/s/1H6kqbUEzdBtG8kUBafFrtA?pwd=ic4k
链接: https://pan.baidu.com/s/17emTQf_VvOn1TFBM-7OFyg?pwd=9bga
作者: Batcher    时间: 2009-4-24 20:53

CtoP.bat 汉字转拼音 by Bo   [20090424]

请问此代码是楼主原创吗?这个 Bo 是楼主本人吗?

“此脚本需要脚本的支持”,这句话是什么意思呢?
作者: ibm    时间: 2009-4-24 21:07     标题: 回复 3楼 的帖子

1,是我原创,
2,Bo即是IBM,是本人
3,“此脚本需要脚本的支持”中的错误以经修改:“此脚本需要《字典》的支持”,
作者: batman    时间: 2009-4-24 21:18

楼主是不是可以想简单点:
  1. @echo off
  2. set /p input=请输入汉字:
  3. set "input=%input =%"
  4. set "input=%input =%"
  5. :lp
  6. for /f "tokens=2" %%a in ('findstr "%input:~,1%" wordbook.txt') do set /p=%%a <nul
  7. set "input=%input:~1%"&if defined input goto lp
  8. pause>nul
复制代码

[ 本帖最后由 batman 于 2009-4-24 21:20 编辑 ]
作者: ibm    时间: 2009-4-24 21:38     标题: 回复 5楼 的帖子

写成这样复杂,目的是把它制作成一个类似第三方程序的东西,
其它的人可以调用这个脚本,并且得到这个脚本的返回值。

楼上的代码很精精简,值得学习!
作者: qq342252004    时间: 2009-5-8 09:52

5楼的朋友 你的批处理怎么用?
作者: qq342252004    时间: 2009-5-9 09:40

不会用啊 能不能给行调用这批处理的命令出来?
作者: conglin58    时间: 2011-4-28 03:39

双击后出现如下提示:

CtoP.bat 汉字转拼音 by Bo   [20090424]
  通过字典(WORDBOOK.txt)查找对应的拼音,
  用户可以手动修改字典中的拼音
  支持阿拉伯数字转拼音
  遇到多音字或字典中未收录的文字,
  程序会暂停执行,并要求用户手动输入

用法:
CtoP.bat "Chinese-String" Return-Variable [WordBook-PATH] [/QP | /SZ]

  参数说明:

  String: 中文字符串
  Variable:输出返回值变量
  PATH:  字典路径
  /QP:   全拼(默认)
  /SZ:   简拼(首字母)

 部分特殊字符及标点不支持 


用法和参数麻烦楼主能举个实例说明一下吗?3Q!
作者: 小黑熊    时间: 2011-5-8 08:53

新人,学习中
作者: 狱渊    时间: 2013-4-29 15:20

谢谢你的分享
作者: icekiller    时间: 2014-2-26 10:58

这个看着很高大上啊
作者: batch.man    时间: 2014-3-6 10:15

CrLf
4 字节
作者: 610100    时间: 2014-8-7 19:25

不错 谢谢了
作者: locoman    时间: 2014-8-30 22:11

谢谢大家的指点,学习……
作者: skyun1314    时间: 2014-10-12 19:20

请问大神在吗?我刚才运行还是不能出结果啊
作者: emenyi    时间: 2016-5-12 09:21

你这个程序怎么用 你好歹写个例子嘛 ,这个样子你让别人怎么用呢?程序是死的,用起来才是活的,没人会用你的程序,写出来有什么意义呢?。
作者: re168    时间: 2016-7-2 17:47

非常感谢楼主的分享!支持...
作者: staff    时间: 2020-7-10 00:42

谢谢楼主的分享




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2