windows 试图理解错误级别的逻辑和“拐杖”,

1l5u6lss  于 2022-12-14  发布在  Windows
关注(0)|答案(2)|浏览(155)

我有它在这里。 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_askselect_form),但是它只会破坏一切!

dced5bon

dced5bon1#

最初,if errorlevel有一种语法,即

if errorlevel n dosomething

其被解释为if errorlevel is n OR GREATER THAN n
因此,测试需要按照错误级别的相反顺序进行,并生成spaghetti代码,以使各种预期错误级别执行多项操作。
后来,errorlevel被引入作为由系统设置的魔术变量,并且else可用于补充if
向后兼容性要求需要保留旧的功能,以避免重写现有程序。
因此,您可以根据自己的情况选择使用%errorlevel%或原始语法。

6qqygrtg

6qqygrtg2#

你有很多事情要做。
语法if errorlevel 1的意思是“如果%errorlevel%是1 * 或更高 *”,所以如果if errorlevel 1是第一件事,它总是由选择触发。这就是它们应该按降序排列的原因。
另外,if语句在比较中包括引号,因此 * IF %ERRORLEVEL% == "1"IF %ERRORLEVEL% == "2"都返回false,因为1不等于"1"。如果要使用if语句,请在这两个语句两边加上引号:

IF "%ERRORLEVEL%" == "1" goto select_format
IF "%ERRORLEVEL%" == "2" goto exit

相关问题