如何在 DOSBox 的子程序中创建变量?
How to create a variable in a subroutine in DOSBox?
我正在 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%
显示所选语言,但我不确定这样是否正确,我不知道如何去做吧。你能帮帮我吗?
解决方案非常简单,因为只需将两行代码添加到批处理文件代码中。
: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%
插入的两行是:
SET LANGUAGE=French
:instfrench
行下方
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
在为语言 Swedish
按 2 时定义了两次,第一次是 French
,然后是 Swedish
。但是 LANGUAGE
仅由第一个 IF 条件和 French
按下 1.
定义
所选语言用于下一个用户提示,如果用户按下键 y 或 Y 也用于复制文件。
我正在 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%
显示所选语言,但我不确定这样是否正确,我不知道如何去做吧。你能帮帮我吗?
解决方案非常简单,因为只需将两行代码添加到批处理文件代码中。
: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%
插入的两行是:
SET LANGUAGE=French
:instfrench
行下方
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
在为语言 Swedish
按 2 时定义了两次,第一次是 French
,然后是 Swedish
。但是 LANGUAGE
仅由第一个 IF 条件和 French
按下 1.
所选语言用于下一个用户提示,如果用户按下键 y 或 Y 也用于复制文件。