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

[原创代码] order.js 按指定顺序排序

[复制链接]
发表于 2014-9-27 01:27:40 | 显示全部楼层 |阅读模式
本帖最后由 CrLf 于 2014-9-27 07:54 编辑

常见的排序方式无法自定义排序的依据,像 2>1>3 这样非线性的排序规则就无法实现了,比如这个帖子,有点想法,就写了这个脚本
将下列代码保存为 order.bat 双击可以看演示结果,若保存为 order.js 则可以作为第三方来调用
  1. @set @bathome=1/*&echo off
  2. (
  3.         for %%a in (
  4.                 "中国 12345" "韩国 654321" "新加坡 wwwww" "1234657"
  5.                 "abcnnhjhka" "美国 abcd" "日本 00000"
  6.         ) do echo %%~a
  7. )>text.txt
  8. ::生成测试样本

  9. cscript -nologo -e:jscript %0 中国 美国 日本 韩国 新加坡 <text.txt
  10. ::批处理调用示例

  11. pause & eixt /b */

  12. var list=[],
  13.         pattern='.|^$',
  14.         obj={}

  15. var unname = WScript.Arguments.UnNamed
  16. for(var i=unname.length;i--;){
  17.         obj[unname(i)]=i+1
  18.         pattern = (unname(i).replace(/,/,'\\$&')) + '|' + pattern
  19. }
  20. var re = (new RegExp()).compile(pattern,'g')
  21. //将命令行参数处理为正则表达式,编译为 re 变量
  22. //并将命令行参数作为对象的属性存储到 obj 对象中

  23. var text = WScript.StdIn.ReadAll().split(/[\r\n]+/g)
  24. //将每行文本保存在数组中

  25. for(var i in text){
  26.         var array=[]
  27.         var match=text[i].match(re)
  28.         for(var j=0;j<match.length;j++){
  29.                 array.push((obj[match[j]]!==undefined)?-obj[match[j]]:match[j])
  30.         }
  31.         text[i] = array
  32. }
  33. //对每行进行正则匹配,将命令行参数对应的内容映射为负值,未匹配的内容逐字切分

  34. text = text.sort()
  35. //根据数组中的数组进行排序

  36. for(var i in text){
  37.         var array=[]
  38.         for(var j in text[i]){
  39.                 array.push((-text[i][j]>0)?unname(-1-text[i][j]):text[i][j])
  40.         }
  41.         WScript.Echo(array.join(''))
  42. }
  43. //对负值部分映射为对应的命令行参数内容
  44. //连接数组并输出
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:46 , Processed in 0.015954 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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