windows 命令内的if语句

qeeaahzv  于 2023-01-14  发布在  Windows
关注(0)|答案(2)|浏览(164)

我正在尝试为正在批处理中生成的CLI生成if语句。以下是代码

if "%command%" == "browser"(
echo Warning, this will only change the default broswer for this session
echo What would you like the default browser to be changed to?
set /p browserdefault=
)

我想让它检查“browserdefault”,看看它是 chrome ,边缘或不同的broswer,如果它不是这些,它应该说“错误,无效的broswer。”
有没有办法在已经存在的if语句里面再加一个if语句?比如if %browserdefault% is“chrome”start C:%username%\filepath\to chrome?
4.我试过许多不同的方法,但似乎都不管用

ni65a41a

ni65a41a1#

正如另一个答案所指出的,这是Windows批处理。我不知道嵌套if语句的方法。我会使用call语句来摆脱嵌套的if语句,如下所示:

:getCommand
 set /P command=Enter command: 
 call :%command%
 goto :getCommand

 :browser
 set /P browserdefault=Enter browser: 
 if not "%browserdefault%"=="chrome" if not "%browserdefault%"=="edge" echo  error, invalid broswer.
 goto :eof
kdfy810k

kdfy810k2#

你想做的是正确的,高尚的和好的。然而,这是Windows批处理。风格和好品味的普通规则不适用。
你不应该尝试在批处理命令中嵌套其他语句。有时候这看起来是可行的,但是(基于很多因素,比如考虑不周的逻辑条件,或者甚至是不同的输入字符串!)偶尔会导致块失败。这会让你陷入痛苦的调试世界。
在评论中建议搜索menu是一个很好的建议。这应该会导致你的代码将有(看起来像)许多不必要的和不相关的块,所有散布着可怕的goto。只是...这很好。这是Windows批处理。它会工作,它会可靠。尽量不要想太多的风格。
在这个优秀的问答中有一些示例菜单:
Menus in Batch File
(as注意,在那里的至少一个回答中,当使用初始if ERRORLEVEL 1时,这实际上将检查该数是否 * 等于大于 *,这需要从较高的ERRORLEVEL开始并向下工作到IF ERRORLEVEL 0,对于每个检查具有GOTO跳转--使用具有诸如if "1" == "%ERRORLEVEL%"或类似的%变量的语句避免了这个陷阱)。

相关问题