我想编写一个批处理文件,该文件可以根据从用户那里收到的输入来工作,但是在我的代码上,它总是调用“ AddingFile”函数。
@ECHO off
ECHO Select [A] Adding File [R] Remove File [C] Copy File [E] Close Program.
GOTO:startCompile
:startCompile
::CLS
SET /p select = Make a selection.
IF "%select%"=="1" ( goto addingFileObject )
IF "%select%"=="2" ( goto removeFileObject )
IF "%select%"=="3" ( goto copy )
IF "%select%"=="4" ( goto defaultExit )
:addingFile
ECHO "Adding files"
goto:EOF
:removeFile
ECHO "Remove files"
goto:EOF
:defaultExit
pause
goto:EOF
:copy
ECHO "Copying Filed"
goto:EOF
答案 0 :(得分:3)
…并使用更合适的Choice
命令:
@Echo Off
Choice /C ARCE /N /M "Select [A]dd [R]emove [C]opy or [E]xit"
If ErrorLevel 4 GoTo :EOF
If ErrorLevel 3 GoTo copy
If ErrorLevel 2 GoTo removeFile
Echo "Adding files"
Timeout 2 /NoBreak>Nul
Exit /B
:removeFile
Echo "Remove files"
Timeout 2 /NoBreak>Nul
Exit /B
:copy
Echo "Copying Files"
Timeout 2 /NoBreak>Nul
答案 1 :(得分:1)
代码包含两个错误。
第SET /P select<space>=...
行是错误的,或者至少会产生意外的行为。
它设置了一个名为select<space>
的变量,因此通过%select%
的访问将始终失败。
在exit /b
命令块之后缺少goto :eof
或IF
,如果所有的IF比较都不为真,则会导致错误的行为。
然后,将执行addingFile部分。
顺便说一句。可以使用ECHO ON
调试此类问题。
在这种情况下,这些行将显示第二个问题,%select%
始终为空
...
c:\Temp>IF "" == "1" (goto addingFileObject )
c:\Temp>IF "" == "2" (goto removeFileObject )
c:\Temp>IF "" == "3" (goto copy )
c:\Temp>IF "" == "4" (goto defaultExit )