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

[文本处理] [已解决]批处理给一堆生日按月和日排序

[复制链接]
发表于 2025-5-3 23:57:26 | 显示全部楼层 |阅读模式
Origin_MD_Data:JXU1MUZBJXU3NTFGJXU1RTc0JXU0RUZEJXU1M0VBJXU2NzA5MjAxMSV1NzY4NCV1NEUwRTIwMTIldTc2ODQldUZGMEMldTYyMTEldTVERjIldTdFQ0YldTVDMDYldTYyNDAldTY3MDkyMDExJXU1RTc0JXU3Njg0JXU1QjU4JXU1MjMwJXU0RTg2JXU0RTAwJXU3Q0ZCJXU1MjE3JXU0RUNFJTI1YXJyMTAlMjUldTUyMzAlMjVhcnIxJTIxYXJyMW51bSUyMSUyNSV1NzY4NCV1NTNEOCV1OTFDRiV1NEUyRCV1RkYwQyV1NUMwNjIwMTIldTVFNzQldTc2ODQldTVCNTgldTUyMzAldTRFODYldTRFMDAldTdDRkIldTUyMTcldTRFQ0UlMjVhcnIyMCUyNSV1NTIzMCUyNWFycjIlMjFhcnIybnVtJTIxJTI1JXU3Njg0JXU1M0Q4JXU5MUNGJXU0RTJEJXUzMDAyJXU2QkNGJXU0RTJBJXU1M0Q4JXU5MUNGJXU3Njg0JXU2ODNDJXU1RjBGJXU1NzQ3JXU0RTNBJTIwJXU1MUZBJXU3NTFGJXU2NUU1JXU2NzFGJTJDJXU1OUQzJXU1NDBEJTBBJXU1MTc2JXU0RTJEJXU1MUZBJXU3NTFGJXU2NUU1JXU2NzFGJXU0RTNBWVlZWU1NREQldTc2ODQldTY4M0MldTVGMEYldUZGMEMldTY3MDgldTRFMEUldTY1RTUldTRFM0EldTRFMDAldTRGNEQldTY1NzAldTc2ODQldTU3NDcldTU3MjgldTUyNEQldTk3NjIldTg4NjUldTk2RjYldTUxRDEldTYyMTAldTRFMDAldTZCQjUldTUxNkIldTRFMkEldTY1NzAldTVCNTcldTc2ODQldTUxRkEldTc1MUYldTY1RTUldTY3MUYldTMwMDIlMEEldTczQjAldTU3MjgldTk3MDAldTg5ODEldTVDMDYldTYyNDAldTY3MDkyMDExJXU3Njg0JXU2MzA5JXU1MUZBJXU3NTFGJXU2NzA4JXU1NDhDJXU2NUU1JXU0RUNFJXU2NUU5JXU1MjMwJXU2NjVBJXU2MzkyJXU1RThGJXU3MTM2JXU1NDBFJXU4RjkzJXU1MUZBJXU1MjMwcmVzdWx0LnR4dCV1OTFDQyV1RkYwQyV1NTkwNCV1NzQwNiV1NUI4QzIwMTEldTc2ODQldTUxOEQldTYzMDkldTU0MEMldTY4MzcldTg5QzQldTUyMTkldTU5MDQldTc0MDYyMDEyJXU1MUZBJXU3NTFGJXU3Njg0JXVGRjBDJXU5MEZEJXU4RjkzJXU1MUZBJXU1MjMwcmVzdWx0LnR4dCV1NEUyRCV1RkYwQyV1ODk4MSV1NkM0MiV1OEY5MyV1NTFGQSV1NjgzQyV1NUYwRiV1RkYxQSV1NTlEMyV1NTQwRCUyOCV1NEU5NCV1NEUyQSV1N0E3QSV1NjgzQyUyOSV1NTFGQSV1NzUxRiV1NjVFNSV1NjcxRiUyOCV1NjgzQyV1NUYwRiV1NTNEOCV1NEUzQVlZWVktTU0tREQldUZGMEMldThGRDgldTY2MkYldTg5ODEldTg4NjUldTk2RjYldTU5MDQldTc0MDYldUZGMEMldTVFNzQldTY3MDgldTY1RTUldTk1RjQldTUyQTAldTRFMEEldTc3RUQldTZBMkEldTdFQkYlMjklMEEldThDMjIldThDMjIldUZGMDE=出生年份只有2011的与2012的,我已经将所有2011年的存到了一系列从%arr10%到%arr1!arr1num!%的变量中,将2012年的存到了一系列从%arr20%到%arr2!arr2num!%的变量中。每个变量的格式均为 出生日期,姓名 其中出生日期为YYYYMMDD的格式,月与日为一位数的均在前面补零凑成一段八个数字的出生日期。 现在需要将所有2011的按出生月和日从早到晚排序然后输出到result.txt里,处理完2011的再按同样规则处理2012出生的,都输出到result.txt中,要求输出格式:姓名(五个空格)出生日期(格式变为YYYY-MM-DD,还是要补零处理,年月日间加上短横线) 谢谢!

评分

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

查看全部评分

发表于 2025-5-4 11:09:35 | 显示全部楼层
本帖最后由 flashercs 于 2025-5-4 11:21 编辑
  1. @echo off
  2. set arr10=20110510,ab
  3. set arr115=20110326,张三
  4. set arr19=20111102,李四
  5. set arr13=20110828,王五

  6. set arr20=20121203,赵四
  7. set arr21=20120131,赵一
  8. set arr22=20120907,刘梦
  9. set arr23=20121016,杨某

  10. (
  11. for /f "tokens=1* delims=," %%a in ('(for /f "tokens=1* delims==" %%a in ('set arr1'^) do @echo %%b^)^|sort /+5') do (
  12.   set "dtm=%%a"
  13.   set "name=%%b"
  14.   setlocal enabledelayedexpansion
  15.   echo !name!     !dtm:~0,4!-!dtm:~4,2!-!dtm:~6,2!
  16.   endlocal
  17. )
  18. for /f "tokens=1* delims=," %%a in ('(for /f "tokens=1* delims==" %%a in ('set arr2'^) do @echo %%b^)^|sort /+5') do (
  19.   set "dtm=%%a"
  20.   set "name=%%b"
  21.   setlocal enabledelayedexpansion
  22.   echo !name!     !dtm:~0,4!-!dtm:~4,2!-!dtm:~6,2!
  23.   endlocal
  24. )

  25. )>result.txt

  26. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢!

查看全部评分

发表于 2025-5-4 11:47:47 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-5-4 13:14 编辑

回复 1# LTSC1809

运行以下批处理代码之前假设已定义了 arr10, arr11, ...,  arr20, arr21, ... 等变量,其格式如 20110105,abc 或 20121229,xyz

  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=2 delims==" %%a in ('set arr1 ^&set arr2') do echo,%%a)>$.#
  3. (for /f "tokens=1-2 delims=," %%a in ('sort $.#') do set "a=%%a" &echo,%%b     !a:~,4!-!a:~4,2!-!a:~6,2!)>"result.txt"
  4. del/q "$.#" &type "result.txt" &pause &exit/b
复制代码
备注:原以为 set ... 输出已完成排序,但结果并不完整,还须用 sort 善终...

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢!

查看全部评分

发表于 2025-5-4 12:22:53 | 显示全部楼层
本帖最后由 Five66 于 2025-5-4 12:23 编辑

将下面代码添加到设置完arr1和arr2之后

  1. (
  2. @echo off&setlocal enabledelayedexpansion
  3. set n=1000000
  4. for /f "tokens=1* delims==" %%a in ('set arr') do (
  5. set _new_arr!n!=%%b
  6. set /a n+=1
  7. )
  8. for /f "tokens=1-2* delims==," %%a in ('set _new_arr^|sort /+16') do (
  9. set "_z_date=%%b"
  10. set "_z_name=%%c"
  11. echo !_z_name!     !_z_date:~0,4!-!_z_date:~4,2!-!_z_date:~6,2!
  12. )
  13. endlocal
  14. )>result.txt
  15. echo,done&pause
复制代码

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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