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

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

本帖最后由 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楼
.
.
.
1

评分人数

    • tmplinshi: 感谢给帖子标题标注[已解决]字样PB + 2
通用简洁实用就是批处理精神

没看懂。

是要生成“菜单一.txt”和“菜单二.txt”吗?按照什么规律来生成这两个文本?

TOP

本帖最后由 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楼时只最示这三个
通用简洁实用就是批处理精神

TOP

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

TOP

本帖最后由 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

评分人数

    • quya: 请教下 Set \n=^ 的意思, 好奇怪的用法。 ...技术 + 1
    • lfoqtal: 谢谢帮忙技术 + 1

TOP

感谢大家帮忙,
4楼的只能出第一层菜单,没有第二层所以无法使用
5楼的可以使用而且数据发生变化后可以适应,非常好
通用简洁实用就是批处理精神

TOP

返回列表