首页 > 解决方案 > 如何让菜单定义一个变量

问题描述

我是批处理脚本新手。我可以根据自己的需要启动基本菜单,但我需要在菜单和变量的正确方向上稍加推动。

所以我希望创建一个菜单,它在选择一个时定义一个变量,从多个项目中定义文件操作开始的项目的路径。

所以这是一个我想弄清楚如何整合的例子:

CHOICE /N /C:1234 /M "Option: "
IF ERRORLEVEL ==4 SET foo
IF ERRORLEVEL ==3 SET bar
IF ERRORLEVEL ==2 SET quak
IF ERRORLEVEL ==1 SET baz

[something something define %bark% from above]

rem overwrite file.png with new option
copy %src%\%bark%\file.png %des%\%quak%\file.png

现在我知道我在这里遗漏了一些东西。如果我说得不够清楚,那我就是个白痴。如何制作一个批处理菜单,该菜单设置一个变量来多次执行相同的操作,而不会使用每个操作的唯一操作来膨胀我的代码?

标签: batch-filemenu

解决方案


您可以通过两种不同的方式来做到这一点:第一种是完全删除显示的位置,因为这是使用命令==时最常见的方式:choice

choice /N /C:1234 /M "Option: "
if errorlevel 4 set foo & goto :foo
if errorlevel 3 set bar & goto :bar
if errorlevel 2 set quak & goto :quak
if errorlevel 1 set baz & goto :baz

[something something define %bark% from above]

rem overwrite file.png with new option
copy %src%\%bark%\file.png %des%\%quak%\file.png

降序只是因为if errorlevel x意味着errorlevel变量是否大于等于x

第二种不太常见的方式,用于在条件为真时设置变量,具体做法如下(注意这里我们不介意顺序):

choice /N /C:1234 /M "Option: "
if %errorlevel% EQU 4 set foo & goto :foo
if %errorlevel% EQU 3 set bar & goto :bar
if %errorlevel% EQU 2 set quak & goto :quak
if %errorlevel% EQU 1 set baz & goto :baz

[something something define %bark% from above]

rem overwrite file.png with new option
copy %src%\%bark%\file.png %des%\%quak%\file.png

你可以在这里替换EQU==虽然不推荐。

请注意,如果要在条件为真的情况下设置变量,请使用第二种方式并以格式设置变量set "var=value"

例如:

if %errorlevel% EQU 4 set "foo=1"
if %errorlevel% EQU 3 set "bar=2"
if %errorlevel% EQU 2 set "quak=3"
if %errorlevel% EQU 1 set "baz=4"

管他呢。

由于不执行所有 4 ifs,您可以在GoTo此处添加:

if %errorlevel% EQU 4 set "foo=1" & goto :foo
if %errorlevel% EQU 3 set "bar=2" & goto :bar
if %errorlevel% EQU 2 set "quak=3" & goto :quak
if %errorlevel% EQU 1 set "baz=4" & goto :baz

并用实际名称替换示例子例程。

有关使用的命令的更多信息,请输入cmd.exe

  • if /?
  • choice /?
  • set /?
  • goto /?

推荐阅读