我目前正在编写一个batch file,它将以脚本语言的格式输出一个纯文本文件,手机上的一个应用程序用它来自动化屏幕接触。 我想要做的是创build一个子菜单,当我的主菜单中只有特定选项被选中时才会被调用。 所以这里是我的batch file的当前版本。 我遇到的问题是当我尝试创build一个子菜单我的行动是是不执行,它只是返回到主菜单。
这是我迄今为止。
:MENU ECHO. ECHO ################################################### ECHO # Select an Option to begin building your script # ECHO ################################################### ECHO. ECHO 1 - START ECHO 2 - SEARCH ECHO 3 - X_COORDINATES ECHO 4 - Y_COORDINATES ECHO 5 - 1 ECHO 6 - 2 ECHO 7 - 3 ECHO 8 - 4 ECHO 9 - 5 ECHO 10 - 6 ECHO 11 - 7 ECHO 12 - 8 ECHO 13 - 9 ECHO 14 - 0 ECHO 15 - QUIT ECHO. SET /PM=TYPE 1-15 THEN PRESS ENTER: IF %M%==1 GOTO START IF %M%==2 GOTO SEARCH IF %M%==3 GOTO X_COORDINATES IF %M%==4 GOTO Y_COORDINATES IF %M%==5 GOTO 1 IF %M%==6 GOTO 2 IF %M%==7 GOTO 3 IF %M%==8 GOTO 4 IF %M%==9 GOTO 5 IF %M%==10 GOTO 6 IF %M%==11 GOTO 7 IF %M%==12 GOTO 8 IF %M%==13 GOTO 9 IF %M%==14 GOTO 0 IF %M%==15 GOTO QUIT
下面的代码块是我遇到的麻烦。 当select“Y”时,它不会将touchPress 0 1315 2451
或脚本代码的sleep 590
行打印到我的文件中,稍后我将在应用程序中使用它来自动search游戏地图,而不必手动键入1200×1200网格上的任何组合。 它只是返回菜单,如“N”被选中。
(我select使用@ECHO OFF
的子菜单,因为我不想混淆自己或任何其他人可能会使用它写他们自己的search脚本,通过打印在控制台窗口,甚至开始使用批处理之前我只希望从主菜单中select某些选项时显示子菜单。)
@ECHO OFF :SUB-MENU SET /PM=TYPE Y,N THEN PRESS ENTER: IF %M%==Y @ECHO touchPress 0 1315 2451>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" @ECHO sleep 590>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" IF %m%==N GOTO MENU
这只是突出强调batch file中的问题块。
ECHO. :START cd.. cd.. cd C:\Documents and Settings\ cd C:\Documents and Settings\Master Terminal\ cd C:\Documents and Settings\Master Terminal\Desktop\ cd C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles @echo :start>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" GOTO :MENU :SEARCH @ECHO touchPress 0 493 2148>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" @ECHO sleep 590>>speedSearch.txt GOTO :MENU :X_COORDINATES @ECHO touchPress 0 529 1221>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" @ECHO sleep 590>>speedSearch.txt GOTO :MENU :Y_COORDINATES @ECHO touchPress 0 1131 1208>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" @echo sleep 590>>speedSearch.txt GOTO :MENU :1 @ECHO touchPress 0 220 1800>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" @ECHO sleep 590>>speedSearch.txt GOTO :SUB-MENU
任何意见,非常感谢。 我对这个项目有一个额外的问题,但是我想在深入挖掘问题之前先解决这个问题。
首先,你可以使用而不是
cd.. cd.. cd C:\Documents and Settings\ cd C:\Documents and Settings\Master Terminal\ cd C:\Documents and Settings\Master Terminal\Desktop\ cd C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles
简单的单线
cd /D "C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles"
或者甚至更好
cd /D "%USERPROFILE%\Desktop\speedSearchFiles"
如果用户帐户名称是Master Terminal
。
其次,即使你描述了一个批处理用户应该提示什么,批处理用户总是可以简单地按下RETURN键而不输入任何内容。 所以最好在这种情况下预先定义一个默认值的变量。
批量用户也可以输入任何字符串,而不只是你推荐的。 所以也要为任何用户输入准备批处理文件。
@ECHO OFF :SUB-MENU SET "M=N" SET /P "M=TYPE Y,N THEN PRESS ENTER: " REM Prevent a syntax error if user enters 1 or more double quotes by removing them. SET "M=%M:"=%" IF /I "%M%"=="Y" ECHO touchPress 0 1315 2451>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" ECHO sleep 590>>"C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles\speedSearch.txt" GOTO MENU
y
或Y
被解释为YES,其他所有解释为NO。
为了理解使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
cd /?
echo /?
goto /?
if /?
rem /?
set /?
虽然你的帖子很广泛,但问题却相当混乱。 所述问题的简短答案是:“是”。 你还没有发表一个“子菜单问题”的例子。 看起来你的问题与“为什么一个变量的IF比较失败?”有关。 你已经发布了一个与问题无关的代码的负载,所以我发布了一个很大的答案也是无关的问题。 ;-)
从用户获取菜单选项最简单的方法是通过choice
命令; 这对于用户(只需按一个键)和程序来说都是简单的,因为你知道choice
的答案总是有效的,所以不需要进一步的测试。
用不同的值重复相同的代码几次的最简单的方法是使用数组的概念 ; 这样,代码只写一次,并通过索引从数组中选择适当的值。
下面的程序等同于您的代码,但包括前面描述的概念。 也许“子菜单”部分不完整,但是你没有描述你的代码在哪些情况下使用“子菜单”,所以我认为是当用户输入一个数字。
@echo off setlocal EnableDelayedExpansion rem Define the array of coordinates per menu options: QBSXY1234567890 set i=2 for %%a in ("493 2148" "529 1221" "1131 1208" "220 1800" "etc...") do ( set /A i+=1 set "coords[!i!]=%%~a" ) :MENU ECHO/ ECHO ################################################### ECHO # Select an Option to begin building your script # ECHO ################################################### ECHO/ ECHO B - BEGIN ECHO S - SEARCH ECHO X - X_COORDINATES ECHO Y - Y_COORDINATES ECHO Digit between 0 and 9 ECHO Q - QUIT ECHO/ :OPTION-0 CHOICE /C QBSXY1234567890 /N /M "SELECT OPTION: " SET "OPTION=%ERRORLEVEL%" rem Process options Quit and Begin IF %OPTION% LEQ 2 GOTO OPTION-%OPTION% rem Otherwise the option is Search, X_coords, Y_coords or a Digit: rem get the value of the corresponding array element ECHO touchPress 0 !coords[%OPTION%]!>> speedSearch.txt ECHO sleep 590>> speedSearch.txt rem If the option was Search, X_coords or Y_coords: it is complete IF %OPTION% LEQ 5 GOTO MENU rem Otherwise the option is a digit: enter the infamous "sub-menu" :SUB-MENU CHOICE /C NY /M "TYPE Y,N" IF ERRORLEVEL 2 ( ECHO touchPress 0 1315 2451>> speedSearch.txt ECHO sleep 590>> speedSearch.txt ) GOTO :MENU :OPTION-2 START cd "C:\Documents and Settings\Master Terminal\Desktop\speedSearchFiles" echo :start> speedSearch.txt GOTO :MENU :OPTION-1 QUIT GOTO :EOF