标题: [数值计算] [已解决]批处理怎样把中文小写数字转换成阿拉伯数字? [打印本页]
作者: pcl_test 时间: 2015-1-28 23:35 标题: [已解决]批处理怎样把中文小写数字转换成阿拉伯数字?
本帖最后由 pcl_test 于 2016-11-23 12:34 编辑
现有一批文本文档,名字中都含有中文小写数字,如
sjush十一.txt 转 sjush11.txt
hi七wh.txt 转 hi7wh.txt
jisnsu一百〇一jj.txt 转 jisnsu101jj.txt
三十七h9i29.txt 转 37h9i29.txt
……etc.
请问,如何把文件名中的中文小写数字转换成阿拉伯数字?PS:只要能转换从〇到一千即可
作者: CrLf 时间: 2015-1-29 01:36
本帖最后由 CrLf 于 2015-1-29 02:18 编辑
这题有意思- 1>1/* : www.bathome.net
- @echo off
- for /f "delims=" %%a in ('dir /a-d /b *.txt^|cscript -nologo -e:jscript "%~0"') do (
- ren %%a
- )
- pause & exit /b
- */
-
- var files = WSH.StdIn.ReadAll().split(/\r?\n/)
-
- for(var i in files){
- var newName = files[i].replace(
- /[零一二三四五六七八九十][O零一二三四五六七八九十百千]*/gm,
- function(match){
- var str = match
- str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})
- str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})
- str = str.replace(/^十/,'+10')
- str = str.replace(/(\*10+)0[零O](?!\+\d\1)/g,'$10')
- return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)
- }
- )
-
- WSH.Echo('"'+files[i]+'" "'+newName+'"')
- }
复制代码
作者: pcl_test 时间: 2015-1-29 12:57
本帖最后由 pcl_test 于 2017-6-22 17:42 编辑
万分感谢,不过对〇没有处理好
作者: CrLf 时间: 2015-1-29 19:36
回复 3# pcl_test
改错了一个地方,看来没看懂其中的逻辑,函数部分的解释和修改位置如下:- function(match){
- var str = match
- //match 为 replace 匹配到的字符串,这里用 str 变量备份一个 match
-
- str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})
- //替换一到九为 1~9
-
- str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})
- //处理N十、N百、N千
-
- str = str.replace(/^十/,'+10')
- //兼容十开头的情况
-
- str = str.replace(/(\*10+)0[零〇](?!\+\d\1)/g,'$10')
- //去除进位大于 1 的两个数字之间的零或〇
- /* 【修改位置】 --- 在这个函数中,你要修改的〇只在这里有用到 */
-
- return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)
- //当字符串中仍存在非算术字符时使用原字符串,否则计算为阿拉伯数字
-
- }
复制代码
作者: chao111111 时间: 2019-5-24 21:56
回复 2# CrLf
请问这个代码怎样可以把子文件夹内的也执行
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |