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

[文本处理] [已解决]批处理如何根据文本生成分类菜单

[复制链接]
发表于 2011-7-29 14:47:58 | 显示全部楼层 |阅读模式
本帖最后由 lfoqtal 于 2011-7-29 17:25 编辑

文本内容如下有几百行,如何根据#号后的文字生成选择菜单,再根据选择显示相关内容
如,菜单一为:
1   市场
2   超市
菜单二为:
1楼
2楼
然后根据选择显示相应的行,
关键内容不是固定的,楼层也不相同有可能有4楼,所以想用批处理自动获取分类
A001=7854621#市场.2楼
A002=4874611#市场.1楼
A003=7854651#市场.2楼
A004=9541871#市场.1楼
A005=1214132#超市.2楼
A006=a454338#市场.3楼
A007=4554451#市场.3楼
A008=3214151#市场.1楼
A009=2344116#市场.2楼
A010=7857815#市场.3楼
A011=7884113#超市.2楼
A012=78541a4#超市.1楼
A013=7878131#市场.2楼
A014=78a4543#市场.1楼
A015=7771551#超市.2楼
A016=155a462#超市.1楼
A017=6441112#市场.2楼
A018=7454121#超市.1楼
A019=7447978#批发部.1楼
.
.
.

评分

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

查看全部评分

发表于 2011-7-29 15:11:02 | 显示全部楼层
没看懂。

是要生成“菜单一.txt”和“菜单二.txt”吗?按照什么规律来生成这两个文本?
 楼主| 发表于 2011-7-29 15:16:43 | 显示全部楼层
本帖最后由 lfoqtal 于 2011-7-29 15:24 编辑

回复 2# tmplinshi


    不是生成文本,是直接生成选择菜单,提示进行选择,类似
  1. echo 1 市场
  2. echo 2 超市
  3. set /p p=请选择
  4. if %p%==1 set p=市场
  5. if %p%==2 set p=超市
  6. cls
  7. echo 1楼
  8. echo 2楼
  9. set/p a=请选择
  10. findstr "#%p%.%a%楼" 1.txt
复制代码
固定的我会编但这样未知分类内容的就不太会了,不知怎么从重复的内容中只保留一项做为菜单
顺序无所谓只要不重复就行,还有要对应数据,比如超市只有1楼2楼4楼时只最示这三个
发表于 2011-7-29 16:19:28 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2,3 delims=#." %%i in (a.txt) do if not defined %%i (set /a n+=1&set a!n!=%%i&set %%i=1)
  4. for /l %%i in (1 1 !n!) do echo %%i !a%%i!
  5. set /p p=请选择
  6. for /l %%i in (1 1 !n!) do if %p%==%%i set p=!a%%i!
  7. echo %p%
  8. pause
复制代码
发表于 2011-7-29 17:16:00 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-7-29 17:22 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set file="list.txt"

  4. set n=
  5. set menu1=

  6. :: ---------------------------
  7. set \n=^


  8. :: ---------------------------

  9. for /f "usebackq tokens=2,3 delims=#." %%a in (%file%) do (
  10.     if not defined #%%a (
  11.         set /a n += 1
  12.         set menu1=!menu1!!n! %%a!\n!
  13.         set name!n!=%%a
  14.         set #%%a=#
  15.     )
  16.     if not defined #%%a.%%b (
  17.         set #%%a.%%b=#
  18.     )
  19. )

  20. :menu1
  21. cls
  22. echo !menu1!
  23. set input1=
  24. set /p input1=请选择:

  25. if not defined input1 goto menu1
  26. if !input1! gtr %n% goto menu1
  27. if !input1! lss 0 goto menu1

  28. :menu2
  29. cls
  30. for /f "skip=1 tokens=2 delims=.=" %%a in (' set #!name%input1%! ') do echo %%a
  31. echo,
  32. set input2=
  33. set /p input2=请选择:

  34. if not defined input2 goto menu2

  35. cls
  36. findstr "#!name%input1%!.%input2%楼" %file%
  37. echo,

  38. pause
  39. goto menu1
复制代码

评分

参与人数 2技术 +2 收起 理由
quya + 1 请教下 Set \n=^ 的意思, 好奇怪的用法。 ...
lfoqtal + 1 谢谢帮忙

查看全部评分

 楼主| 发表于 2011-7-29 17:27:12 | 显示全部楼层
感谢大家帮忙,
4楼的只能出第一层菜单,没有第二层所以无法使用
5楼的可以使用而且数据发生变化后可以适应,非常好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:54 , Processed in 0.019973 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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