标题: [文本处理] 人民币大写转换.bat [打印本页]
作者: jiavip 时间: 2025-1-10 23:33 标题: 人民币大写转换.bat
本帖最后由 jiavip 于 2025-1-10 23:38 编辑
潜水10几年甚少发帖,前段时间做会计的朋友工作需要叫我帮忙编写个 人民币大写脚本!起初在网上找了一堆脚本,感觉都不怎么靠谱(也有可能是自己水平有限,理解不同)于是自己编写了一个!
用法就是扔到%WINDIR%目录下,取名RMB.BAT朋友需要用的时候只需要按WIN+R输入(RMB + 阿拉伯数字 )然后就可以转换成 大写单位,原本可以想用Clip 命令直接复制到剪切板里的。
但朋友说不需要。就省略了。她知道怎么从批处理文件里复制文字。
给朋友的脚本还有其他附带很多转换和其他自用功能,这里只帖出 《人民币大写转换》部分。- :RMB
- Call,:Cnm 74 15 1 & Title 人民币大写转换
- Set/a Q=02102452501
- @ECHO OFF
- REM 百度得出中文单位分别是:清净(10的负二十一次方)、虚空、六德、刹那、弹指、瞬息、须臾、逡巡、模糊、漠、渺、埃、尘、沙、纤、微、忽、丝、毫、厘、分、零、壹、贰、叁、肆、伍、陆、柒、捌、玖、分、角、圆、拾、佰、仟、萬、亿、兆、京、垓、秭、穰、沟、涧、正、载、极(10的四十八次方)
- REM QQ:%QQ%
- Echo %~1|FindStr "^[0-9]*$">Nul || echo 非法输入!按任意键退出!&&PAUSE>NUL&&EXIT
- SET RMB检测=
- SET RMB检测=%~1
- SET RMB窗口=
- SET RMB窗口=%~1
- SET 单位=圆
- :RMB位数
- SET RMB窗口=%RMB窗口:~1%
- Set/a RMB位数+=1
- Set/a 窗口长度=%窗口长度%+4
- IF NOT "%RMB窗口%"=="" GOTO,RMB位数
- If %窗口长度% Lss 15 Set 窗口长度=15
- Set/a 窗口长度=%窗口长度%+2
- Call,:Cnm 74 %窗口长度% 2
- ECHO. QQ:%Q%
- ECHO.输入:%~1
- :RMB循环
- SET/a RMB位数-=1
- CALL,:RMB转换 %RMB检测:~0,1% %RMB位数%
- SET RMB检测=%RMB检测:~1%
- IF NOT "%RMB检测%"=="" GOTO,RMB循环
- PAUSE>NUL
- EXIT
- :RMB转换
- IF "%~1"=="0" GOTO,RMB零
- IF "%~1"=="1" SET/P="壹"<NUL
- IF "%~1"=="2" SET/P="贰"<NUL
- IF "%~1"=="3" SET/P="叁"<NUL
- IF "%~1"=="4" SET/P="肆"<NUL
- IF "%~1"=="5" SET/P="伍"<NUL
- IF "%~1"=="6" SET/P="陆"<NUL
- IF "%~1"=="7" SET/P="柒"<NUL
- IF "%~1"=="8" SET/P="捌"<NUL
- IF "%~1"=="9" SET/P="玖"<NUL
- IF "%~2"=="51" SET/P="仟"<NUL
- IF "%~2"=="50" SET/P="佰"<NUL
- IF "%~2"=="49" SET/P="拾"<NUL
- IF "%~2"=="48" SET/P="极"<NUL
- IF "%~2"=="47" SET/P="仟"<NUL
- IF "%~2"=="46" SET/P="佰"<NUL
- IF "%~2"=="45" SET/P="拾"<NUL
- IF "%~2"=="44" SET/P="载"<NUL
- IF "%~2"=="43" SET/P="仟"<NUL
- IF "%~2"=="42" SET/P="佰"<NUL
- IF "%~2"=="41" SET/P="拾"<NUL
- IF "%~2"=="40" SET/P="正"<NUL
- IF "%~2"=="39" SET/P="仟"<NUL
- IF "%~2"=="38" SET/P="佰"<NUL
- IF "%~2"=="37" SET/P="拾"<NUL
- IF "%~2"=="36" SET/P="涧"<NUL
- IF "%~2"=="35" SET/P="仟"<NUL
- IF "%~2"=="34" SET/P="佰"<NUL
- IF "%~2"=="33" SET/P="拾"<NUL
- IF "%~2"=="32" SET/P="沟"<NUL
- IF "%~2"=="31" SET/P="仟"<NUL
- IF "%~2"=="30" SET/P="佰"<NUL
- IF "%~2"=="29" SET/P="拾"<NUL
- IF "%~2"=="28" SET/P="穰"<NUL
- IF "%~2"=="27" SET/P="仟"<NUL
- IF "%~2"=="26" SET/P="佰"<NUL
- IF "%~2"=="25" SET/P="拾"<NUL
- IF "%~2"=="24" SET/P="秭"<NUL
- IF "%~2"=="23" SET/P="仟"<NUL
- IF "%~2"=="22" SET/P="佰"<NUL
- IF "%~2"=="21" SET/P="拾"<NUL
- IF "%~2"=="20" SET/P="垓"<NUL
- IF "%~2"=="19" SET/P="仟"<NUL
- IF "%~2"=="18" SET/P="佰"<NUL
- IF "%~2"=="17" SET/P="拾"<NUL
- IF "%~2"=="16" SET/P="京"<NUL
- IF "%~2"=="15" SET/P="仟"<NUL
- IF "%~2"=="14" SET/P="佰"<NUL
- IF "%~2"=="13" SET/P="拾"<NUL
- IF "%~2"=="12" SET/P="兆"<NUL
- IF "%~2"=="11" SET/P="仟"<NUL
- IF "%~2"=="10" SET/P="佰"<NUL
- IF "%~2"=="9" SET/P="拾"<NUL
- IF "%~2"=="8" SET/P="亿"<NUL
- IF "%~2"=="7" SET/P="仟"<NUL
- IF "%~2"=="6" SET/P="佰"<NUL
- IF "%~2"=="5" SET/P="拾"<NUL
- IF "%~2"=="4" SET/P="萬"<NUL
- IF "%~2"=="3" SET/P="仟"<NUL
- IF "%~2"=="2" SET/P="佰"<NUL
- IF "%~2"=="1" SET/P="拾"<NUL
- IF "%~2"=="0" SET/P="%单位%"<NUL
- SET 零=0
- GOTO,:EOF
- :RMB零
- SET 后零=%RMB检测:~1,1%
- IF "%~2"=="4" SET/P="萬"<NUL&SET 零=4&GOTO,:EOF
- IF "%~2"=="8" SET/P="亿"<NUL&SET 零=8&GOTO,:EOF
- IF "%~2"=="12" SET/P="兆"<NUL&SET 零=12&GOTO,:EOF
- IF "%~2"=="16" SET/P="京"<NUL&SET 零=16&GOTO,:EOF
- IF "%~2"=="20" SET/P="垓"<NUL&SET 零=20&GOTO,:EOF
- IF "%~2"=="24" SET/P="秭"<NUL&SET 零=24&GOTO,:EOF
- IF "%~2"=="28" SET/P="穰"<NUL&SET 零=28&GOTO,:EOF
- IF "%~2"=="32" SET/P="沟"<NUL&SET 零=32&GOTO,:EOF
- IF "%~2"=="36" SET/P="涧"<NUL&SET 零=36&GOTO,:EOF
- IF "%~2"=="40" SET/P="正"<NUL&SET 零=40&GOTO,:EOF
- IF "%~2"=="44" SET/P="载"<NUL&SET 零=44&GOTO,:EOF
- IF "%~2"=="48" SET/P="极"<NUL&SET 零=48&GOTO,:EOF
- IF "%零%"=="0" ( IF NOT "%后零%"=="0" SET/P="零"<NUL&SET 零=1 )
- GOTO,:EOF
- EXIT
复制代码
CNM 标签是窗口调用,就是设置窗口大小和脚本颜色,就不贴出来了。
水平马虎,欢迎大佬们完善、指点、查错、和质询!
作者: 宁处理 时间: 2025-1-11 08:59
学习学习,感谢分享。
作者: fzp070 时间: 2025-1-12 01:29
感谢创作并分享!拿走使用了哈
作者: jiavip 时间: 2025-1-12 20:24
回复 3# fzp070
那脚本有个小BUG 如果输入 125000的时候会导致脚本以零结尾,且单位不显示!
碰巧我求助的脚本疑难有人帮我解决,我就修善了一下这脚本!帖上完整的可用脚本吧!- @ECHO OFF
- Call,:Cnm 74 30 2 & Title 人民币大写转换
- Echo.请输入人民币的阿拉伯数字:
- Set/p 数字=
- Call,:RMB %数字%
- :RMB
- REM 百度得出中文单位分别是:清净(10的负二十一次方)、虚空、六德、刹那、弹指、瞬息、须臾、逡巡、模糊、漠、渺、埃、尘、沙、纤、微、忽、丝、毫、厘、分、零、壹、贰、叁、肆、伍、陆、柒、捌、玖、分、角、圆、拾、佰、仟、萬、亿、兆、京、垓、秭、穰、沟、涧、正、载、极(10的四十八次方)
- Echo %~1|FindStr "^[0-9]*$">Nul || echo 非法输入!按任意键退出!&&PAUSE>NUL&&EXIT
- Set/a Q=02102452501
- SET RMB检测=
- SET RMB检测=%~1
- SET RMB窗口=
- SET RMB窗口=%~1
- SET 单位=圆
- :RMB位数
- SET RMB窗口=%RMB窗口:~1%
- Set/a RMB位数+=1
- Set/a 窗口长度=%窗口长度%+4
- IF NOT "%RMB窗口%"=="" GOTO,RMB位数
- If %窗口长度% Lss 15 Set 窗口长度=15
- Set/a 窗口长度=%窗口长度%+3
- Call,:Cnm 74 %窗口长度% 3
- ECHO.QQ:%Q%
- ECHO.输入:%~1
- :RMB循环
- SET/a RMB位数-=1
- CALL,:RMB转换 %RMB检测:~0,1% %RMB位数%
- SET RMB检测=%RMB检测:~1%
- IF NOT "%RMB检测%"=="" GOTO,RMB循环
- PAUSE>NUL
- EXIT
- :RMB转换
- IF "%~1"=="0" GOTO,RMB零
- IF "%~1"=="1" SET/P="壹"<NUL
- IF "%~1"=="2" SET/P="贰"<NUL
- IF "%~1"=="3" SET/P="叁"<NUL
- IF "%~1"=="4" SET/P="肆"<NUL
- IF "%~1"=="5" SET/P="伍"<NUL
- IF "%~1"=="6" SET/P="陆"<NUL
- IF "%~1"=="7" SET/P="柒"<NUL
- IF "%~1"=="8" SET/P="捌"<NUL
- IF "%~1"=="9" SET/P="玖"<NUL
- IF "%~2"=="51" SET/P="仟"<NUL
- IF "%~2"=="50" SET/P="佰"<NUL
- IF "%~2"=="49" SET/P="拾"<NUL
- IF "%~2"=="48" SET/P="极"<NUL
- IF "%~2"=="47" SET/P="仟"<NUL
- IF "%~2"=="46" SET/P="佰"<NUL
- IF "%~2"=="45" SET/P="拾"<NUL
- IF "%~2"=="44" SET/P="载"<NUL
- IF "%~2"=="43" SET/P="仟"<NUL
- IF "%~2"=="42" SET/P="佰"<NUL
- IF "%~2"=="41" SET/P="拾"<NUL
- IF "%~2"=="40" SET/P="正"<NUL
- IF "%~2"=="39" SET/P="仟"<NUL
- IF "%~2"=="38" SET/P="佰"<NUL
- IF "%~2"=="37" SET/P="拾"<NUL
- IF "%~2"=="36" SET/P="涧"<NUL
- IF "%~2"=="35" SET/P="仟"<NUL
- IF "%~2"=="34" SET/P="佰"<NUL
- IF "%~2"=="33" SET/P="拾"<NUL
- IF "%~2"=="32" SET/P="沟"<NUL
- IF "%~2"=="31" SET/P="仟"<NUL
- IF "%~2"=="30" SET/P="佰"<NUL
- IF "%~2"=="29" SET/P="拾"<NUL
- IF "%~2"=="28" SET/P="穰"<NUL
- IF "%~2"=="27" SET/P="仟"<NUL
- IF "%~2"=="26" SET/P="佰"<NUL
- IF "%~2"=="25" SET/P="拾"<NUL
- IF "%~2"=="24" SET/P="秭"<NUL
- IF "%~2"=="23" SET/P="仟"<NUL
- IF "%~2"=="22" SET/P="佰"<NUL
- IF "%~2"=="21" SET/P="拾"<NUL
- IF "%~2"=="20" SET/P="垓"<NUL
- IF "%~2"=="19" SET/P="仟"<NUL
- IF "%~2"=="18" SET/P="佰"<NUL
- IF "%~2"=="17" SET/P="拾"<NUL
- IF "%~2"=="16" SET/P="京"<NUL
- IF "%~2"=="15" SET/P="仟"<NUL
- IF "%~2"=="14" SET/P="佰"<NUL
- IF "%~2"=="13" SET/P="拾"<NUL
- IF "%~2"=="12" SET/P="兆"<NUL
- IF "%~2"=="11" SET/P="仟"<NUL
- IF "%~2"=="10" SET/P="佰"<NUL
- IF "%~2"=="9" SET/P="拾"<NUL
- IF "%~2"=="8" SET/P="亿"<NUL
- IF "%~2"=="7" SET/P="仟"<NUL
- IF "%~2"=="6" SET/P="佰"<NUL
- IF "%~2"=="5" SET/P="拾"<NUL
- IF "%~2"=="4" SET/P="萬"<NUL
- IF "%~2"=="3" SET/P="仟"<NUL
- IF "%~2"=="2" SET/P="佰"<NUL
- IF "%~2"=="1" SET/P="拾"<NUL
- IF "%~2"=="0" SET/P="%单位%"<NUL
- SET 零=0
- GOTO,:EOF
- :RMB零
- SET 后零=%RMB检测:~1,1%
- IF "%后零%"=="" SET 零=1
- IF "%~2"=="0" SET/P="%单位%"<NUL
- IF "%~2"=="4" SET/P="萬"<NUL&SET 零=4&GOTO,:EOF
- IF "%~2"=="8" SET/P="亿"<NUL&SET 零=8&GOTO,:EOF
- IF "%~2"=="12" SET/P="兆"<NUL&SET 零=12&GOTO,:EOF
- IF "%~2"=="16" SET/P="京"<NUL&SET 零=16&GOTO,:EOF
- IF "%~2"=="20" SET/P="垓"<NUL&SET 零=20&GOTO,:EOF
- IF "%~2"=="24" SET/P="秭"<NUL&SET 零=24&GOTO,:EOF
- IF "%~2"=="28" SET/P="穰"<NUL&SET 零=28&GOTO,:EOF
- IF "%~2"=="32" SET/P="沟"<NUL&SET 零=32&GOTO,:EOF
- IF "%~2"=="36" SET/P="涧"<NUL&SET 零=36&GOTO,:EOF
- IF "%~2"=="40" SET/P="正"<NUL&SET 零=40&GOTO,:EOF
- IF "%~2"=="44" SET/P="载"<NUL&SET 零=44&GOTO,:EOF
- IF "%~2"=="48" SET/P="极"<NUL&SET 零=48&GOTO,:EOF
- IF "%零%"=="0" ( IF NOT "%后零%"=="0" SET/P="零"<NUL&SET 零=1 )
- GOTO,:EOF
- EXIT
- :CNM
- If Not "%~1"=="" Color %~1
- If Not "%~2"=="" MODE con: COLS=%~2
- If Not "%~3"=="" MODE con: LINES=%~3
- GOTO,:EOF
复制代码
原本还可以再改进一下加上小数点后两位的,角,分 ,,,但现社会都很少用 角和分了,且加上会再次加写判断过程,有点耗时,我也就懒得再后续完善了!
作者: 小白龙 时间: 2025-1-12 20:36
感谢楼上分享, 我用ai改powershell, 几十轮都不行? 哎, ai还是不行啊- function Convert-RMB {
- param (
- [string]$input
- )
-
- # 检查输入是否为数字
- if (-not ($input -match '^[0-9]*$')) {
- Write-Host "非法输入!"
- return
- }
-
- $units = @('圆', '拾', '佰', '仟', '萬', '拾萬', '佰萬', '仟萬', '亿', '拾亿', '佰亿', '仟亿', '兆', '拾兆', '佰兆', '仟兆', '京', '拾京', '佰京', '仟京', '垓', '拾垓', '佰垓', '仟垓', '秭', '拾秭', '佰秭', '仟秭', '穰', '拾穰', '佰穰', '仟穰', '沟', '拾沟', '佰沟', '仟沟', '涧', '拾涧', '佰涧', '仟涧', '正', '拾正', '佰正', '仟正', '载', '拾载', '佰载', '仟载', '极')
- $digits = @('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
-
- # 计算输入的长度
- $length = $input.Length
- $result = ""
-
- for ($i = 0; $i -lt $length; $i++) {
- $digit = [int]$input[$i]
- $position = $length - $i - 1
- $unit = if ($position -lt $units.Length) { $units[$position] } else { "" }
-
- if ($digit -ne 0) {
- $result += $digits[$digit] + $unit
- } elseif ($unit -match '圆|萬|亿|兆|京|垓|秭|穰|沟|涧|正|载|极') {
- $result += $unit
- } elseif ($result -ne "" -and $result[-1] -ne '零') {
- $result += '零'
- }
- }
-
- $result = $result -replace '零+', '零'
- $result = $result -replace '零$', ''
- $result = $result -replace '零圆$', '圆'
-
- return $result
- }
-
- # 测试
- $input = Read-Host "输入一个数字"
- $result = Convert-RMB -input $input
- Write-Host "输入:" $input
- Write-Host "输出:" $result
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |