中国DOS联盟论坛

中国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