[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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

评分人数

TOP

回复 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. }
复制代码

TOP

返回列表