|
f6fly
初级用户
积分 123
发帖 13
注册 2004-2-24
状态 离线
|
『楼 主』:
读取文件名作菜单选项,并可分别选择执行相应命令。
当前目录有多个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,
请问各位高手该如何写才好呢?
|
|
2010-4-2 14:52 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
2 楼』:
@echo off
:s
cls
echo.当前目录存在文本文件:
echo.********************
dir /b /a *.txt
echo.********************
set p=
set/p p=请输入文本文件名称(不含.扩展名):
if not exist "%p%.txt" echo.输入错误&goto e
type %p%.txt
:e
echo.********************
pause
goto s
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-4-2 15:05 |
|
|
f6fly
初级用户
积分 123
发帖 13
注册 2004-2-24
状态 离线
|
『第
3 楼』:
果真厉害,
现在是需要输入整个文件名,或是想输入序号该怎么做?如输入1,则type 第一个文件。...
|
|
2010-4-2 15:12 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
4 楼』:
@echo off
:s
cls&Endlocal
setlocal enabledelayedexpansion
echo.当前目录存在文本文件:&echo.********************
for /F "delims=" %%a in ('dir /b /a *.txt') do set/a a+=1&set "han_!a!=%%a"&echo.[!a!] 显示 %%a 的内容
echo.********************
set/p p=请输入[]内的代码:
if not defined han_%p% echo.输入错误&goto e
type "!han_%p%!"
:e
echo.&echo.********************&pause
goto s 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!] 显示 %%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 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-4-2 15:20 |
|
|
f6fly
初级用户
积分 123
发帖 13
注册 2004-2-24
状态 离线
|
『第
5 楼』:
非常感谢。是这样的效果,可是为什么在纯DOS下运行出错呢,提示语法错误。
|
|
2010-4-2 16:18 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
|
2010-4-2 16:21 |
|
|
f6fly
初级用户
积分 123
发帖 13
注册 2004-2-24
状态 离线
|
『第
7 楼』:
: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下却不可以呢?
|
|
2010-4-2 16:21 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
8 楼』:
因为我从没运行过dos ,所以你可以运行下面P脚本进行测试,并贴上所有的返回信息
@echo off&setlocal enabledelayedexpansion
echo.本批处理仅用于测试1
set a=0
for /F "delims=" %%a in ('dir /b /a *.rom') do (
set/a a+=1
set "han_!a!=%%a"
echo.代码:!a! 变量名:han_!a! 文件名:%%a
)
echo.本批处理仅用于测试2
set|find /i "han_"
echo.本批处理仅用于测试3
if defined han_1 (echo 完成.) else echo 测试
pause 很奇怪,你的主板不支持Q-Flash和@BIOS功能吗?为什么要进DOS刷呢?
[ Last edited by Hanyeguxing on 2010-4-2 at 18:29 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-4-2 18:28 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
9 楼』:
你可以尝试把你的代码中部分做修改:
如果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 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-4-2 19:12 |
|
|
f6fly
初级用户
积分 123
发帖 13
注册 2004-2-24
状态 离线
|
『第
10 楼』:
因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
请帮忙分析,谢谢。
|
|
2010-4-6 18:33 |
|