找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30900|回复: 4

[数值计算] [已解决]批处理怎样把中文小写数字转换成阿拉伯数字?

[复制链接]
发表于 2015-1-28 23:35:36 | 显示全部楼层 |阅读模式
本帖最后由 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:只要能转换从〇到一千即可

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-1-29 01:36:31 | 显示全部楼层
本帖最后由 CrLf 于 2015-1-29 02:18 编辑

这题有意思
  1. 1>1/* :  www.bathome.net
  2. @echo off
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt^|cscript -nologo -e:jscript "%~0"') do (
  4.         ren %%a
  5. )
  6. pause & exit /b
  7. */

  8. var files = WSH.StdIn.ReadAll().split(/\r?\n/)

  9. for(var i in files){
  10.         var newName = files[i].replace(
  11.                 /[零一二三四五六七八九十][O零一二三四五六七八九十百千]*/gm,
  12.                 function(match){
  13.                         var str = match
  14.                         str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})
  15.                         str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})
  16.                         str = str.replace(/^十/,'+10')
  17.                         str = str.replace(/(\*10+)0[零O](?!\+\d\1)/g,'$10')
  18.                         return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)
  19.                 }
  20.         )

  21.         WSH.Echo('"'+files[i]+'" "'+newName+'"')
  22. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-1-29 12:57:10 | 显示全部楼层
本帖最后由 pcl_test 于 2017-6-22 17:42 编辑

万分感谢,不过对〇没有处理好
发表于 2015-1-29 19:36:45 | 显示全部楼层
回复 3# pcl_test


    改错了一个地方,看来没看懂其中的逻辑,函数部分的解释和修改位置如下:
  1. function(match){
  2.         var str = match
  3.         //match 为 replace 匹配到的字符串,这里用 str 变量备份一个 match

  4.         str = str.replace(/[一二三四五六七八九]/g,function(match){return '+'+'空一二三四五六七八九'.search(match)})
  5.         //替换一到九为 1~9

  6.         str = str.replace(/([1-9])([十百千])/g,function(match,_1,_2){return _1 + ({'十':'*10','百':'*100','千':'*1000'}[_2])})
  7.         //处理N十、N百、N千

  8.         str = str.replace(/^十/,'+10')
  9.         //兼容十开头的情况

  10.         str = str.replace(/(\*10+)0[零〇](?!\+\d\1)/g,'$10')
  11.         //去除进位大于 1 的两个数字之间的零或〇
  12.         /* 【修改位置】 ---  在这个函数中,你要修改的〇只在这里有用到 */

  13.         return (/[^0-9\+\*]/.test(str)) ? match : eval(0+str)
  14.         //当字符串中仍存在非算术字符时使用原字符串,否则计算为阿拉伯数字

  15. }
复制代码
发表于 2019-5-24 21:56:36 | 显示全部楼层
回复 2# CrLf
请问这个代码怎样可以把子文件夹内的也执行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:34 , Processed in 0.011084 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表