Board logo

标题: 这个多选择批处理要如何完美实现...求助~~~(在线等_)~ [打印本页]

作者: baepyygy     时间: 2006-11-21 06:54    标题: 这个多选择批处理要如何完美实现...求助~~~(在线等_)~

代码:
@echo off
color e
set /p ok=请选择存档服务器(1-5):
if "%ok%"== "1" goto server1
if "%ok%"== "2" goto server2
if "%ok%"== "3" goto server3
if "%ok%"== "4" goto server4
if "%ok%"== "5" goto server5

:server1
if exist GameSave1 (Start GameSave1\svClient.exe) else @echo 选择的存档服务器不存在,请重新选择....
pause
cls
call run.bat
pause
goto end

:server2
if exist GameSave2 (Start GameSave2\svClient.exe) else @echo 选择的存档服务器不存在,请重新选择....
call run.bat
pause
cls
pause
goto end

:server3
if exist GameSave3 (Start GameSave3\svClient.exe) else @echo 选择的存档服务器不存在,请重新选择....
pause
cls
call run.bat
pause
goto end


:server4
if exist GameSave4 (Start GameSave4\svClient.exe) else @echo 选择的存档服务器不存在,请重新选择....
pause
cls
call run.bat
pause
goto end

:server5
if exist GameSave5 (Start GameSave5\svClient.exe) else @echo 选择的存档服务器不存在,请重新选择....
pause
cls
call run.bat
pause
goto end
:end
exit

问题是当用户选择的按键是非1-5的时候,如何给出"服务器不存在的提示,按任意键继续"的提示...现在是除1-5外的任意键都会默认打开第一个储存服务器.
该如何做....
另外,有没有更好的方法来实现这个批处理所实现的功能!~~~~

[ Last edited by baepyygy on 2006-11-21 at 09:45 AM ]
作者: IceCrack     时间: 2006-11-21 08:02
if "%ok%"== "1" goto server1
if "%ok%"== "2" goto server2
if "%ok%"== "3" goto server3
if "%ok%"== "4" goto server4
if "%ok%"== "5" goto server5
goto wrong
:wrong
echo 服务器不存在
echo 按任意键继续
>nul pause
call run.bat


你这个程序可以不用call的,在最开头的地方加上一个
cls
:start
后面用到call的语句都换成goto就行了
作者: baepyygy     时间: 2006-11-21 08:16
能不能完整的写出来。。。有点不太明白~~
作者: baepyygy     时间: 2006-11-21 09:38
@echo off
color e
cls
set /p ok=请选择存档服务器(1-5):
if "%ok%"== "1" goto server1
if "%ok%"== "2" goto server2
if "%ok%"== "3" goto server3
if "%ok%"== "4" goto server4
if "%ok%"== "5" goto server5

:server1
if exist GameSave1 (Start GameSave1\svClient.exe) else goto wrong
pause
cls
pause
goto end

:server2
if exist GameSave2 (Start GameSave2\svClient.exe) else goto wrong
pause
cls
pause
goto end

:server3
if exist GameSave3 (Start GameSave3\svClient.exe) else goto wrong
pause
cls
pause
goto end


:server4
if exist GameSave4 (Start GameSave4\svClient.exe) else goto wrong
pause
cls
pause
goto end

:server5
if exist GameSave5 (Start GameSave5\svClient.exe) else goto wrong
pause
cls
pause
goto end

goto wrong

:wrong
echo 服务器不存在
echo 按任意键继续
>nul pause
goto start

:start
start run.bat

:end
exit

这样,非数字键时默认还是到SERVER1处。。
作者: vkill     时间: 2006-11-21 09:42
楼上的这样能做到吗?
作者: baepyygy     时间: 2006-11-21 09:42
哎。。所以才向大家请教啊
作者: lxmxn     时间: 2006-11-21 10:44

@echo off
color e
:start
cls
set /p ok=请选择存档服务器(1-5):
if %ok% geq 1 if %ok% leq 5 (
        if exist GameSave%ok% (Start GameSave%ok%\svClient.exe) else (goto wrong)
) else (goto wrong)
goto :eof

:wrong
echo 服务器不存在
echo 按任意键继续
>nul pause
goto start
   未测试,不知道对不对,有问题请跟帖继续讨论。

作者: baepyygy     时间: 2006-11-21 10:49
刚在机器上试了下,暂时没问题。。。。明天换台机继续试下。。。

能不能把整段代码的含义解释一下??
作者: anqing     时间: 2006-11-21 10:53
lx的代码果然精简,厉害!
作者: baepyygy     时间: 2006-11-21 10:55
要解释下就能更好了。。。。有点看不明白~!~
作者: tao0610     时间: 2006-11-21 14:24

echo off&color e
:start
cls
set /p ok=请选择存档服务器(1-5):
if exist GameSave%ok% Start GameSave%ok%\svClient.exe&&goto :eof

echo 选择的存档服务器不存在,请重新选择.... &pause >nul
goto start

作者: srleopard     时间: 2006-11-22 02:01
LX写的太好了,很受启发呀
作者: baepyygy     时间: 2006-11-22 08:51
还有个问题,我在输入“0”的时候,程序会退出。而且在输入“1.”时,程序也会执行。。。
作者: lxmxn     时间: 2006-11-22 09:13


  Quote:
Originally posted by baepyygy at 2006-11-22 08:51:
还有个问题,我在输入“0”的时候,程序会退出。而且在输入“1.”时,程序也会执行。。。


  你说的是几楼的代码出现这种情况?

作者: baepyygy     时间: 2006-11-22 09:16
就你写的。。。。。。。我在按0的时候就退出。1.的时候还是程序执行
作者: lxmxn     时间: 2006-11-22 09:29

  Re baepyygy :

  我的代码是那样的啊,而你说的情况和代码的作用也是相符的啊。
 
  莫非你要实现其它的?

作者: baepyygy     时间: 2006-11-22 09:34
关键是按”0“就退出了啊。。。应该是除了1-5.其它的任意键或组合键返回的都是提示码,然后重新运行程序丫!
作者: lxmxn     时间: 2006-11-22 10:27

  哦,明白了,把代码简单的改一下就成了。

作者: lxmxn     时间: 2006-11-22 10:31

@echo off
color e
:start
cls
set /p ok=请选择存档服务器(1-5):
if %ok% geq 1 (
        if %ok% leq 5 (
                if exist GameSave%ok% (Start GameSave%ok%\svClient.exe) else (goto wrong)
        ) else (goto wrong)
) else (goto wrong)
goto :eof

:wrong
echo 服务器不存在
echo 按任意键继续
>nul pause
goto start
  这样呢?  如果还有什么问题,请继续跟帖讨论。。

作者: baepyygy     时间: 2006-11-22 10:35
现在按0,没有退出了。但是在按"1.“的情况下,还是会执行对应的程序。

另外问一下  goto :eof 是指向哪里的?
作者: lxmxn     时间: 2006-11-22 11:09


  Quote:
Originally posted by baepyygy at 2006-11-22 10:35:
现在按0,没有退出了。但是在按"1.“的情况下,还是会执行对应的程序。

另外问一下  goto :eof 是指向哪里的?


  因为"1."是大于"1"的,所以你输入"1.",if语句同样是真,所以会执行下面的程序。你不输入"1."不就可以了??

  goto :EOF 指向的是批处理文件的结尾。

作者: baepyygy     时间: 2006-11-22 11:19
知道的情况下肯定不会按,如果不知道呢?还有没有办法改进下?
作者: lxmxn     时间: 2006-11-22 11:30

  如果你要改进的话,也行,不过代码会比较复杂。

  但是我个人感觉没有这个必要,因为批处理上面已经说得比较清楚了,"选择1-5",如果你要选择第一个,那你就输入1就行了,何必要输入1.呢?难不成你选第一项还输入123456……不成??

作者: baepyygy     时间: 2006-11-22 11:35
呵呵呵 ,有些人很无聊的,没事就瞎搞。。然后说你的东西有问题。。。。
作者: lxmxn     时间: 2006-11-22 11:40

  那我无语了。

  这就像是要使用for命令,而把for命令写成了form一样。

作者: baepyygy     时间: 2006-11-22 11:41
嗯,不过还是谢谢你了。。。。。。我还得慢慢消化一下这段代码!~~~
作者: hxuan999     时间: 2006-11-24 03:57
16楼的代码,修改后.
@echo off
color e
:start
cls
set /p ok=请选择存档服务器(1-5):
if "%ok%" EQU "" goto start
if "%ok:~1,1%" NEQ "" goto start
if %ok% geq 1 (
    if %ok% leq 5 (
        if exist GameSave%ok% (Start GameSave%ok%\svClient.exe) else (goto wrong)
    ) else (goto wrong)
) else (goto wrong)
goto :eof

:wrong
echo 服务器不存在
echo 按任意键继续
>nul pause
goto start
11楼的代码,修改后.
@echo off&color e
:start
cls
set /p ok=请选择存档服务器(1-5):
if "%ok%" EQU "" goto start
if "%ok:~1,1%" NEQ "" goto start
if exist GameSave%ok% Start GameSave%ok%\svClient.exe&&goto :eof

echo 选择的存档服务器不存在,请重新选择.... &pause >nul
goto start
这样应该可以吧.

[ Last edited by hxuan999 on 2006-11-23 at 04:02 PM ]
作者: baepyygy     时间: 2006-11-24 06:05
嗯,可以了..按1.不会运行程序..不过,也没有提示 请重新选择的提示哦~~~不过谢谢了....顺便问下,能不能解释下每行代码的含义啊!!
作者: weikiss     时间: 2006-11-24 06:16
各位都写得不错,我就不加参与了
作者: baepyygy     时间: 2006-11-24 06:21
写出来看看撒
作者: hxuan999     时间: 2006-11-25 04:43


  Quote:
Originally posted by baepyygy at 2006-11-23 18:05:
嗯,可以了..按1.不会运行程序..不过,也没有提示 请重新选择的提示哦~~~不过谢谢了....顺便问下,能不能解释下每行代码的含义啊!!

把上面代码if "%ok:~1,1%" NEQ "" goto start
里的goto start改成goto wrong就有提示了.

[ Last edited by hxuan999 on 2006-11-24 at 04:48 PM ]
作者: baepyygy     时间: 2006-11-25 05:38
NEQ是什么意思啊?
作者: hxuan999     时间: 2006-11-25 06:15
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于等于
GTR - 大于
GEQ - 大于等于