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

[ 30, 3030, "门禁", 2 ]
上面例子,中的“2”,直接指明是第几层的数据
就根据它进行处理,遍历一次就好了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,5) do set "tab=!tab! "
  4. ::排版用的
  5. set n=0
  6. echo;{
  7. rem 从0级开始
  8. for /f "tokens=2 delims=[]" %%a in (test.txt) do (
  9. set str=%%a
  10. rem 有引号,用到变量处理
  11. for /f "tokens=1-4 delims= " %%1 in ("!str!") do (
  12. for /f "tokens=1-4 delims=," %%1 in ("%%1,%%2,3,%%4") do (
  13. rem 第3项有 “,” 号,所以要把它先拿掉
  14. rem 根据最后项数值变化判断处于哪一级,
  15. rem 同级,升级,降级,做不同的处理,并排版。
  16. rem 排序也可以做,就是效率有点低,如果不影响就算了。
  17. if !n! lss %%4 (
  18. if not defined v%%1 (
  19. echo;!tab:~-%%4!"%%1":{
  20. set v%%1=1
  21. ) else (
  22. echo;!tab:~-%%4! %%2
  23. )
  24. set one=%%2
  25. set n=%%4
  26. ) else (
  27. if !n! gtr %%4 (
  28. echo; !tab:~-%%4!}
  29. set n=%%4
  30. ) else (
  31. if defined one (
  32. echo;!tab:~-%%4! "!one!":{},&set one=
  33. )
  34. echo;!tab:~-%%4! "%%2":{},<nul
  35. )
  36. )
  37. ))
  38. )
  39. rem 收尾了,做 “}” 号对齐
  40. for /l %%a in (!n!,-1,1) do (
  41. echo;!tab:~-%%a!}
  42. )
  43. echo;}
  44. pause
复制代码
1

评分人数

    • 523066680: 纯批处理的,强PB + 18 技术 + 1

TOP

回复 7# 523066680

改好了!
再看看。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,5) do set "tab=!tab! "
  4. ::排版用的
  5. set n=0
  6. echo;{
  7. rem 从0级开始
  8. for /f "tokens=2 delims=[]" %%a in (test.txt) do (
  9. set str=%%a
  10. rem 有引号,用到变量处理
  11. for /f "tokens=1-4 delims= " %%1 in ("!str!") do (
  12. for /f "tokens=1-4 delims=," %%1 in ("%%1,%%2,3,%%4") do (
  13. rem 第3项有 “,” 号,所以要把它先拿掉
  14. rem 根据最后项数值变化判断处于哪一级,
  15. rem 同级,升级,降级,做不同的处理,并排版。
  16. rem 排序也可以做,就是效率有点低,如果不影响就算了。
  17. if !n! lss %%4 (
  18. if not defined v%%1 (
  19. echo;!tab:~-%%4!"%%1":{
  20. set v%%1=1
  21. ) else (
  22. echo;!tab:~-%%4! %%2
  23. )
  24. set one=%%2
  25. set/a n=%%4,m=n-1
  26. ) else (
  27. if !n! gtr %%4 (
  28. for /l %%a in (!m!,-1,%%4) do (
  29. if defined one (
  30. echo;!tab:~-%%a! "!one!":{}&set one=
  31. )
  32. echo; !tab:~-%%a!},
  33. )
  34. set n=%%4
  35. ) else (
  36. if defined one (
  37. echo;!tab:~-%%4! "!one!":{},
  38. )
  39. set one=%%2
  40. )
  41. )
  42. ))
  43. )
  44. if defined one (
  45. echo;!tab:~-%n%! "!one!":{}&set one=
  46. )
  47. rem 收尾了,做 “}” 号对齐
  48. for /l %%a in (!n!,-1,1) do (
  49. echo;!tab:~-%%a!}
  50. )
  51. echo;}
  52. pause
复制代码

TOP

回复 9# 523066680

你给出的数据测试没问题。
只要升级没有跳级,就没有问题,降级可以跳级,已经有处理了

TOP

回复 11# 523066680


  又改好了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,5) do set "tab=!tab! "
  4. ::排版用的
  5. set n=0
  6. echo;{
  7. rem 从0级开始
  8. for /f "tokens=2 delims=[]" %%a in (test.txt) do (
  9. set str=%%a
  10. rem 有引号,用到变量处理
  11. for /f "tokens=1-4 delims= " %%1 in ("!str!") do (
  12. for /f "tokens=1-4 delims=," %%1 in ("%%1,%%2,3,%%4") do (
  13. rem 第3项有 “,” 号,所以要把它先拿掉
  14. rem 根据最后项数值变化判断处于哪一级,
  15. rem 同级,升级,降级,做不同的处理,并排版。
  16. rem 排序也可以做,就是效率有点低,如果不影响就算了。
  17. if !n! lss %%4 (
  18. if not defined v%%1 (
  19. echo;!tab:~-%%4!"%%1":{
  20. set v%%1=1
  21. ) else (
  22. echo;!tab:~-%%4! %%2
  23. )
  24. set one=%%2
  25. set/a n=%%4
  26. ) else (
  27. if !n! gtr %%4 (
  28. set /a m=%%4+1
  29. rem $$$$$$ 修改了这里 $$$$$$$
  30. for /l %%a in (!n!,-1,!m!) do (
  31. if defined one (
  32. echo;!tab:~-%%a! "!one!":{}&set one=
  33. )
  34. echo;!tab:~-%%a!},
  35. set n=%%4
  36. )
  37. set one=%%2
  38. rem $$$$$$$ 修改了这里  $$$$$$
  39. ) else (
  40. if defined one (
  41. echo;!tab:~-%%4! "!one!":{},
  42. )
  43. set one=%%2
  44. )
  45. )
  46. ))
  47. )
  48. if defined one (
  49. echo;!tab:~-%n%! "!one!":{}&set one=
  50. )
  51. rem 收尾了,做 “}” 号对齐
  52. for /l %%a in (!n!,-1,1) do (
  53. echo;!tab:~-%%a!}
  54. )
  55. echo;}
  56. pause
复制代码
1

评分人数

    • 523066680: 这次括号匹配了 :DPB + 12 技术 + 1

TOP

返回列表