![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-02 01:00 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 读取文件名作菜单选项,并可分别选择执行相应命令。 |
| 可打印版本 1,073 / 9 |
| 第1楼 f6fly | 发表于 2010-04-02 14:52 |
| 初级用户 发帖 13 积分 123 | |
|
读取文件名作菜单选项,并可分别选择执行相应命令。 当前目录有多个txt文件,现在我想用批处理将每个txt文件做为一个菜单,当用户选择某个txt文件时,则显示选中的txt文件内容。
如c:\下有以下txt文件: 1.txt 2.txt 3.txt 我现在要做个批处理,运行时显示 [1] 显示1.txt内容 [2] 显示2.txt内容 [3] 显示3.txt内容 Select: 这里当用敲1回车,则运行type 1.txt, 敲2回车,则运行type 2.txt, 敲3回车,则运行type 3.txt, 请问各位高手该如何写才好呢? |
|
| 第2楼 Hanyeguxing | 发表于 2010-04-02 15:05 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
| 第3楼 f6fly | 发表于 2010-04-02 15:12 |
| 初级用户 发帖 13 积分 123 | |
|
果真厉害,
现在是需要输入整个文件名,或是想输入序号该怎么做?如输入1,则type 第一个文件。... |
|
| 第4楼 Hanyeguxing | 发表于 2010-04-02 15:20 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
cls 清屏. Endlocal 结束本地化,用于清除goto s前所产生的所有本地化环境变量. setlocal enabledelayedexpansion 开始本地化及启用延迟的环境变量扩展. for /F "delims=" %%a in ('dir /b /a *.txt') do 解析当前目录中所有.txt文件名. set/a a+=1从1 开始加记数并赋值给变量a. set "han_!a!=%%a" 将%%a赋值给变量han_!a!. echo. 显示 %%a 的内容 输出信息. if not defined han_%p% echo.输入错误&goto e 通过变量han_%p%是否存在来判断输入的%p%正确与否. type "!han_%p%!" 显示文件!han_%p%!即for /f中的%%a文件名的内容 [ Last edited by Hanyeguxing on 2010-4-2 at 16:18 ] |
|
| 第5楼 f6fly | 发表于 2010-04-02 16:18 |
| 初级用户 发帖 13 积分 123 | |
|
非常感谢。是这样的效果,可是为什么在纯DOS下运行出错呢,提示语法错误。
|
|
| 第6楼 Hanyeguxing | 发表于 2010-04-02 16:21 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
纯dos下的set、for等,与xp sp3下的cmd命令解释器语法不一样
我从不写dos下的批处理 |
|
| 第7楼 f6fly | 发表于 2010-04-02 16:21 |
| 初级用户 发帖 13 积分 123 | |
|
:s
@echo off&setlocal enabledelayedexpansion cls set a=0 echo. echo. 当前目录有以下BIOS文件可供刷新: echo. ************************************* echo. for /F "delims=" %%a in ('dir /b /a *.rom') do ( set/a a+=1 set "han_!a!=%%a" echo. [!a!] 刷新 %%a BIOS文件 echo. ) echo. ************************************* set p= set/p p= 请输入要刷新的BIOS文件序号: if not defined han_%p% echo.&echo. 输入错误,请按任意键继续,或按 Ctrl+C 终止程序!&goto e @echo on AFUDOS %p%.rom /P /B /N /C /S @echo off goto end :e echo. rem echo. ************************************* echo. Press any key to continue... &pause >nul goto s :end 我改成了这种, 因为有多个BIOS文件可供选择刷新,在XP的CMD下运行正常,可为什么DOS下却不可以呢? |
|
| 第8楼 Hanyeguxing | 发表于 2010-04-02 18:28 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
因为我从没运行过dos ,所以你可以运行下面P脚本进行测试,并贴上所有的返回信息
很奇怪,你的主板不支持Q-Flash和@BIOS功能吗?为什么要进DOS刷呢? [ Last edited by Hanyeguxing on 2010-4-2 at 18:29 ] |
|
| 第9楼 Hanyeguxing | 发表于 2010-04-02 19:12 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
你可以尝试把你的代码中部分做修改:
如果DOS下不支持for /f则 for /F "delims=" %%a in ('dir /b /a *.rom') do ( 改成 for %%a in (*.rom) do ( 在xp系统的批处理中,此语法的for不支持隐藏及系统属性的文件。 如果DOS下不支持if not defined,则 if not defined han_%p% echo.&echo. 输入错误,请按任意键继续,或按 Ctrl+C 终止程序!&goto e 改成 if "!han_%p%!"=="" echo.&echo. 输入错误,请按任意键继续,或按 Ctrl+C 终止程序!&goto e [ Last edited by Hanyeguxing on 2010-4-2 at 19:14 ] |
|
| 第10楼 f6fly | 发表于 2010-04-06 18:33 |
| 初级用户 发帖 13 积分 123 | |
|
因DOS下操作较多。
@echo off&setlocal enabledelayedexpansion echo.TEST1 set a=0 for /F "delims=" %%a in ('dir /b /a *.rom') do ( set/a a+=1 set "han_!a!=%%a" echo.Code:!a! variable:han_!a! filename:%%a ) echo.TEST2 set|find /i "han_" echo.TEST3 if defined han_1 (echo SUCCESS.) else echo TEST pause 执行结果如下: A:\test.bat off&setlocal enabledelayedexpansion A:\echo.TEST1 TEST1 A:\set a=0 A:\for /F "delims=" %a in ('dir /b /a *.rom') do ( Synatax error A:\set/a a+=1 A:\set "han_!a!=%a" A:\echo.Code:!a! variable:han_!a! filename:%a ) Code:!a! variable:han_!a! filename:%a ) A:\echo.TEST2 TEST2 A:\set|find /i "han_" Bad command or file name (注,我没有find命令) A:\echo.TEST3 TEST3 A:\if defined han_1 (echo SUCCESS.) else echo TEST Syntax error A:\pause 请帮忙分析,谢谢。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |