【问题标题】:How to create a variable in a subroutine in DOSBox?如何在 DOSBox 的子程序中创建变量?
【发布时间】:2020-01-04 11:18:09
【问题描述】:

我正在 DOSBox 中创建批处理多语言安装程序。

我想在一个子程序中创建一个变量,它可以根据用户的选择更改显示的语言。这是一个菜单示例:

:installer
@echo off
echo SELECT LANGUAGE
echo [1] French
echo [2] Swedish
choice /c12
if errorlevel 2 goto instswedish
if errorlevel 1 goto instfrench

:instfrench
SET RETURN=okfrench
goto message
:okfrench
copy d:\french.com c:\
exit

:instswedish
SET RETURN=okswedish
goto message
:okswedish
copy d:\swedish.com c:\
exit

:message
echo I will install the software in %LANGUAGE%
choice /c:yn
if errorlevel 2 goto installer
goto %RETURN%

可能我需要在:installer 部分设置变量,以便%LANGUAGE% 显示所选语言,但我不确定这是否正确,我不知道该怎么做。你能帮帮我吗?

【问题讨论】:

    标签: batch-file dos subroutine dosbox


    【解决方案1】:

    解决方案非常简单,因为只需要在批处理文件代码中添加两行代码。

    :installer
    @echo off
    echo SELECT LANGUAGE
    echo [1] French
    echo [2] Swedish
    choice /c12
    if errorlevel 2 goto instswedish
    if errorlevel 1 goto instfrench
    
    :instfrench
    SET LANGUAGE=French
    SET RETURN=okfrench
    goto message
    :okfrench
    copy d:\french.com c:\
    exit
    
    :instswedish
    SET LANGUAGE=Swedish
    SET RETURN=okswedish
    goto message
    :okswedish
    copy d:\swedish.com c:\
    exit
    
    :message
    echo I will install the software in %LANGUAGE%
    choice /c:yn
    if errorlevel 2 goto installer
    goto %RETURN%
    

    插入的两行是:

    1. SET LANGUAGE=French:instfrench 行下方
    2. SET LANGUAGE=Swedish:instswedish 行下方

    就是这样。

    但代码可以进一步优化如下:

    @echo off
    :installer
    echo Select language:
    echo    [1] French
    echo    [2] Swedish
    choice /c:12
    if errorlevel 1 set LANGUAGE=French
    if errorlevel 2 set LANGUAGE=Swedish
    
    echo I will install the software in %LANGUAGE%
    choice /c:yn
    if errorlevel 2 goto installer
    
    copy d:\%LANGUAGE%.com c:\
    exit
    

    errorlevel 在第一选择上的评估顺序在这里很重要。因为if errorlevel number 的意思是IF errorlevel GREATER or EQUAL number,所以必须首先计算最小的数字,而必须先计算最大的数字。环境变量LANGUAGE 在按2 为语言Swedish 定义两次,首先是French,然后是Swedish 重新定义。但LANGUAGE 仅由第一个 IF 条件定义,French 按下 1

    选择的语言用于下一个用户提示,如果用户按下键 yY 也用于复制文件。

    【讨论】:

    • 你可以通过使用goto ok%language% 来省略RETURN 变量(我没有DOS/DOSBOX,所以我无法验证)
    猜你喜欢
    • 2012-04-20
    • 2017-04-04
    • 2013-02-15
    • 1970-01-01
    • 2019-01-16
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多