我有它在这里。 bat 文件,我试图找出一些东西。我的大脑只是沸腾,试图意识到什么是错的!
下面是我的代码:
echo off
setlocal
cls
:perm_ask
echo Make a permanent format?
CHOICE /C YN /N /T 15 /D N /M "Press Y for Yes and N for No: "
IF ERRORLEVEL 1 set perm=TRUE
IF ERRORLEVEL 2 set perm=FALSE
goto select_format
:select_format
cls
if "%perm%"=="TRUE" (echo You have selected the permanent save mode. Be CAREFUL! & echo.):: checking for truth
echo Select the file format:
echo =============
echo 1) .fb2 format
echo 2) .epub format
echo 3) .fb2 + .epub formats
CHOICE /C 123 /N /M "Format: "
IF ERRORLEVEL 1 set form=fb2
IF ERRORLEVEL 2 set form=epub
IF ERRORLEVEL 3 set form=fb2,epub
goto url_insert
:url_insert
cls
if "%perm%"=="TRUE" (echo TRUEEEE) else (echo FALSEEE):: checking for truth
if "%form%"=="fb2,epub" (echo You have chosen the .epub and .fb2 format
) else (echo You have chosen the .%form% format)
echo.
set /p url=Insert the URL:
Elib2Ebook.exe -u %url% -f %form%
if "%perm%"=="TRUE" (goto url_insert) else (goto ask_cont)
:ask_cont
echo.
set ERRORLEVEL=0:: trying to reset a huge negative value
CHOICE /C YN /M "Continue? "
IF ERRORLEVEL 1 goto select_format
IF ERRORLEVEL 2 goto exit
:exit
@exit
在perm_ask
中,我询问是否要设置永久文件格式。
在select_form
中我给form
赋值
在url_insert
中,我插入了链接,程序的执行就完成了
在ask_count
中,如果我在perm_ask
中回答“否”,它将被要求继续或退出...
毕竟,如果我不改变顺序,即使我在Continue?
中,答案是No,它仍然会转到select_form
所以问题是,如果我之前用ERRORLEVEL把所有的东西都按顺序排列,我甚至不需要把它按相反的顺序排列(因为它不工作的一些原因!)。那么在url_insert
中,如果不改变顺序或不这样做,我会遇到Continue?
的问题:
IF %ERRORLEVEL% == "1" goto select_format
IF %ERRORLEVEL% == "2" goto exit
那么问题来了...为什么?为什么在那之前一切都很好,但是之后你要么需要改变顺序,要么把ERRORLEVEL赋给一个变量?我试着在其他地方改变ERRORLEVEL的顺序(perm_ask
和select_form
),但是它只会破坏一切!
2条答案
按热度按时间dced5bon1#
最初,
if errorlevel
有一种语法,即其被解释为
if errorlevel is n OR GREATER THAN n
。因此,测试需要按照错误级别的相反顺序进行,并生成spaghetti代码,以使各种预期错误级别执行多项操作。
后来,
errorlevel
被引入作为由系统设置的魔术变量,并且else
可用于补充if
。向后兼容性要求需要保留旧的功能,以避免重写现有程序。
因此,您可以根据自己的情况选择使用
%errorlevel%
或原始语法。6qqygrtg2#
你有很多事情要做。
语法
if errorlevel 1
的意思是“如果%errorlevel%
是1 * 或更高 *”,所以如果if errorlevel 1
是第一件事,它总是由选择触发。这就是它们应该按降序排列的原因。另外,
if
语句在比较中包括引号,因此 *IF %ERRORLEVEL% == "1"
和IF %ERRORLEVEL% == "2"
都返回false,因为1
不等于"1"
。如果要使用if
语句,请在这两个语句两边加上引号: