批处理文件:有没有办法设置类似“如果我的批处理文件错误在任何点转到位置

时间:2015-01-04 10:12:56

标签: batch-file cmd

我正在研究基于dos文本的游戏,使用批处理文件对其进行编码。我有大量的if input == this goto this esque事情正在发生。但是有一个问题。

它检查的大多数输入是"尝试"接下来是一些字。示例

if "%try%" == "try light" goto Light

我发现如果你的所有" if"你放置一个" goto start"它可以作为一种故障安全工作。但是,如果该人输入"尝试"然后是胡言乱语,它崩溃了。并在我的所有if函数下面键入"如果errorlevel 1 goto error"似乎没有做出改变。

所以我得到的是,有没有办法在批处理文件的开头设置一个检查错误的函数。如果发生错误,它将运行"转到%location%"?

如果我说的话令人困惑,那么我现在的代码就是:

set /p try=
if “%try%” == “try womens restroom” goto WRestroom
if “%try%” == “try womens” goto WRestroom
if “%try%” == “try mens restroom” goto MRestroom
if “%try%” == “try mens” goto MRestroom
if “%try%” == “try room 302” goto R302
if “%try%” == “try door 302” goto R302
if “%try%” == “try 302” goto R302
if “%try%” == “try room 301” goto Intro2
if “%try%” == “try 301” goto Intro2
if “%try%” == “try office door” goto Office3
if “%try%” == “try third floor office door” goto Office3
if “%try%” == “try office” goto Office3

goto hallway1error

如果输入是"请尝试"其次是CRASH!

3 个答案:

答案 0 :(得分:0)

这是一个简单的答案。 NO。

但这会解决您的问题goto hallway1fuckup。如果前面的陈述都不成立,则会运行。

你的报价看起来很奇怪。你是在记事本中这样做而不是Word,不是你。输入记事本。

答案 1 :(得分:0)

简短回答:将echo CRASHED & exit /b放在最后一个if语句之后。

解析用户输入是件很难看的事情。如果你成功地使它成为白痴,你可以肯定,有人会发明一个更好的白痴。

也许至少有以下一些技巧可以帮助您:

@echo off

:start
echo(
set /p "inp=What to do? "
for /f "tokens=1,*" %%v in ("%inp%") do call :%%v "%%w" 2>nul || goto :error
echo "%inp%" cannot be parsed.
goto :start

:try  REM verb is TRY
:go   REM verb is GO
echo %1|findstr /i "women" >nul && goto :WRestroom
echo(%1|findstr /i "men" >nul && goto :MRestroom
REM important: first test for "women", then for "men"
echo %1|findstr /i "302" >nul && goto :R302
echo %1|findstr /i "301" >nul && goto :R301
echo %1|findstr /i "office" >nul && goto :Office3
echo %1 is not a valid destination
goto :start

:look
:examine
echo verb is LOOK or EXAMINE
echo rest is %1
goto:start

:error
echo invalid verb. Use "try", "go", "look", "examine"
goto :start


 :WRestroom
 :MRestroom
 :R302
 :R301
:office3
echo you entered%0 %~1
if /i "%0"==":Office3" echo Cheater!!
goto :start

这会使用一些技巧。

技巧1:将输入反汇编为“FirstWord”和“rest”(“tokens = 1,*”)。然后以“rest”作为参数调用“FirstWord”。丢弃任何错误消息(“2> nul”),如果失败(因为标签不存在)(“||”)转到错误

技巧2:使用多个标签做同样的事情(“尝试”和“去”)(“WRestroom”,“MRestroom”,“R302”,...用于演示以保持代码简短 - 当然这些应该是“自己的子程序”)

技巧3:扫描关键字而不是整个字符串(只是“301”而不是“301室”或“门301”或“301”)

技巧4:“&&”作为“如果以前的命令成功那么”(这里:“如果找到关键字,那么”)

这不是防弹的,但你需要一些知识(或运气不好)让它失败。

注意:只输入不带动词的标签名称时,您可以跳转到任何标签(例如仅输入“office3”)。作弊的好处 - 我的意思是测试。

答案 2 :(得分:0)

我发现发生的错误是因为谷歌文档有奇怪的引用。幸运的是,我可以用记事本中复制的引号“查找并替换”所有谷歌引用,它工作得很好。感谢大家帮助我。