Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 带有变量选项的批处理选择命令_Batch File_Variables_Arraylist - Fatal编程技术网

Batch file 带有变量选项的批处理选择命令

Batch file 带有变量选项的批处理选择命令,batch-file,variables,arraylist,Batch File,Variables,Arraylist,我想知道是否可以使用变量选项执行choice/c命令 我脑子里想的例子: @echo off set "list=Bob,Adam,Steve" set amount=3 for /l %%i in (1; 1; %amount%) do call :sub %%i goto chooseName :sub for /f "tokens=%1 delims=," %%a in ("%list%") do echo %%i. %%a goto :eof :chooseName choic

我想知道是否可以使用变量选项执行choice/c命令

我脑子里想的例子:

@echo off
set "list=Bob,Adam,Steve" 
set amount=3 

for /l %%i in (1; 1; %amount%) do call :sub %%i

goto chooseName
:sub
for /f "tokens=%1 delims=," %%a in ("%list%") do echo %%i. %%a
goto :eof

:chooseName
choice /c %amount% /m "What name do you want to choose"

if errorlevel 3 do ...
if errorlevel 2 do ...
if errorlevel 1 do ...
列表的创建工作正常,我可以选择从列表中选择,但只会说:

What name do you want to choose: [3]?
所以我需要更改代码的这一部分:

choice /c 123 /m "What name do you want to choose"

因此,如果我在列表中添加一个名称,它将允许您输入1、2、3或4,如果我删除一个名称,它将返回给您3个选择。

是的,这是完全可行的,您只需要创建您的列表

也就是说,您确实意识到选择只允许从128到254的0-9、A-Z A-Z和ASCII字符,对吗

也就是说,您需要使用字符列表来创建选择,只需选择所需的选择数

以下是可供选择的字符列表:

0 1 2 3 4 5 7 8 9 A B C D E F G H I JèM O p Q R T V W X Y Z A B C D E F G I K L M O p Q R T W X Y ZèèèMèMèMèMèMèMèMèWèY Zè⌐ ¬ ½ ¼ ¡ « » ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ └ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀ α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■

现在要使用这些字符,你当然不能有空格,但是对于字符的选择,你需要空格

以下是实现您的目标的示例脚本: 在上面的脚本中,我们创建了一个通用的Choice函数,一个我们传递给它的值,我们希望用它来返回所选选项的值

在Choice函数中,我们解析选项列表,这些选项也可以作为指向选项列表的指针发送,然后我们对它们进行计数,回显选项的数量和。。哎呀,我意识到我使用的数字选择方法只是设置了/A,这是一个巧妙的技巧,但却赢了;t不适用于字母选项,也不会显示初始的前导0选项

好的,我会修正的

但在任何情况下,我们都会为选项创建变量,并将它们与一个数值相关联,这是选项返回的所有值,因此我们可以选择正确的索引值

我们让用户做出选择,然后用它来填充返回变量的结果值,我们也会返回原始的选择值,因为我们已经将其保存在_selected中,所以如果您想计算出实际值,您可以

但是,您也可以创建一个要运行的操作列表,该列表也可以使用与创建选项列表类似的方法填充,然后简单地匹配操作,因为它将保存在一个变量中,与我们匹配值的方式相同

好的,你现在应该让英语正确地显示出来

好吧,我意识到我需要加上它作为一个调用,并且有一些错误命名的变量等等

长话短说,我如上所述进行了修改,并有时间进行测试,以确保它按预期工作

以下是示例结果:

      Pick a Name:
========================

 0 :    Bob
 1 :    Adam
 2 :    Steve
 3 :    Alex
 4 :    Durand
 5 :    Killian
 6 :    Hello
 7 :    There
 8 :    Now
 9 :    Is
 A :    Going
 B :    Past

What name do you want to choose? 7

The Index Chosen Was: 8
The Result Matched is:  There

是的,这是完全可行的,你只需要创建你的列表

也就是说,您确实意识到选择只允许从128到254的0-9、A-Z A-Z和ASCII字符,对吗

也就是说,您需要使用字符列表来创建选择,只需选择所需的选择数

以下是可供选择的字符列表:

0 1 2 3 4 5 7 8 9 A B C D E F G H I JèM O p Q R T V W X Y Z A B C D E F G I K L M O p Q R T W X Y ZèèèMèMèMèMèMèMèMèWèY Zè⌐ ¬ ½ ¼ ¡ « » ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ └ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀ α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■

现在要使用这些字符,你当然不能有空格,但是对于字符的选择,你需要空格

以下是实现您的目标的示例脚本: 在上面的脚本中,我们创建了一个通用的Choice函数,一个我们传递给它的值,我们希望用它来返回所选选项的值

在Choice函数中,我们解析选项列表,这些选项也可以作为指向选项列表的指针发送,然后我们对它们进行计数,回显选项的数量和。。哎呀,我意识到我使用的数字选择方法只是设置了/A,这是一个巧妙的技巧,但却赢了;t不适用于字母选项,也不会显示初始的前导0选项

好的,我会的 结束这一切

但在任何情况下,我们都会为选项创建变量,并将它们与一个数值相关联,这是选项返回的所有值,因此我们可以选择正确的索引值

我们让用户做出选择,然后用它来填充返回变量的结果值,我们也会返回原始的选择值,因为我们已经将其保存在_selected中,所以如果您想计算出实际值,您可以

但是,您也可以创建一个要运行的操作列表,该列表也可以使用与创建选项列表类似的方法填充,然后简单地匹配操作,因为它将保存在一个变量中,与我们匹配值的方式相同

好的,你现在应该让英语正确地显示出来

好吧,我意识到我需要加上它作为一个调用,并且有一些错误命名的变量等等

长话短说,我如上所述进行了修改,并有时间进行测试,以确保它按预期工作

以下是示例结果:

      Pick a Name:
========================

 0 :    Bob
 1 :    Adam
 2 :    Steve
 3 :    Alex
 4 :    Durand
 5 :    Killian
 6 :    Hello
 7 :    There
 8 :    Now
 9 :    Is
 A :    Going
 B :    Past

What name do you want to choose? 7

The Index Chosen Was: 8
The Result Matched is:  There

在评论中给本的答案加上一点不太可行-

您可以定义一个变量,并按顺序选择所有可能的答案;然后根据需要使用变量amount返回子字符串

另一点-您可以调用变量标签来代替所有if errorlevel语句

@回音 延迟扩展 设置allchoices=123456789abcdefg 设定金额=6 选择/c!所有选项:~0,%amount%/m你想选什么? 转到:选项%errorlevel% rem如果没有与以下项相对应的标签,您将得到一个错误:选项%errorlevel% :选择1 回声你选择了1 暂停 后藤:eof :选择10 你选择了一个 暂停 后藤:eof
当然,确保你定义了所有的标签,并确保你的allchoices足够大,可以满足你可能需要的任何数量。

在Ben的回答中添加一点内容在评论中并不切实可行-

您可以定义一个变量,并按顺序选择所有可能的答案;然后根据需要使用变量amount返回子字符串

另一点-您可以调用变量标签来代替所有if errorlevel语句

@回音 延迟扩展 设置allchoices=123456789abcdefg 设定金额=6 选择/c!所有选项:~0,%amount%/m你想选什么? 转到:选项%errorlevel% rem如果没有与以下项相对应的标签,您将得到一个错误:选项%errorlevel% :选择1 回声你选择了1 暂停 后藤:eof :选择10 你选择了一个 暂停 后藤:eof
当然,请确保您定义了所有标签,并确保您的allchoices足够大,可以满足您可能需要的任何数量。

尽管这看起来非常不同,但它使用的技术与Ben基本相同。 它没有子例程,只使用所有可能字符的子集。我把大写字母放在末尾,因为键入a比键入a更容易。这减少了选择的数量,但我认为使用键盘上不易使用的字符是没有意义的,如果你真的应该有60多个选择,你应该考虑一种更方便用户的方法

@echo off
setlocal enabledelayedexpansion  

set "list=Bob,Adam,Steve,Alex,Bart,Charles,Dough,Emil,Fritz,Gustav" 
set "allchoices=123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
set count=0
for %%A in (%list%) do (
  call echo %%allchoices:~!count!,1%%: %%A
  set /a count+=1
  set "list[!count!]=%%A"
)
set "choices=!allchoices:~0,%count%!"
choice /cs /c %choices% /m "What name do you want to choose"
echo that would be !list[%errorlevel%]!
goto :sub%errorlevel%
:sub0
echo Control-C is mean...
goto :eof
:sub1
echo Hello Bob
goto :eof
REM etc...

虽然这看起来很不一样,但它使用的技术与Ben基本相同。 它没有子例程,只使用所有可能字符的子集。我把大写字母放在末尾,因为键入a比键入a更容易。这减少了选择的数量,但我认为使用键盘上不易使用的字符是没有意义的,如果你真的应该有60多个选择,你应该考虑一种更方便用户的方法

@echo off
setlocal enabledelayedexpansion  

set "list=Bob,Adam,Steve,Alex,Bart,Charles,Dough,Emil,Fritz,Gustav" 
set "allchoices=123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
set count=0
for %%A in (%list%) do (
  call echo %%allchoices:~!count!,1%%: %%A
  set /a count+=1
  set "list[!count!]=%%A"
)
set "choices=!allchoices:~0,%count%!"
choice /cs /c %choices% /m "What name do you want to choose"
echo that would be !list[%errorlevel%]!
goto :sub%errorlevel%
:sub0
echo Control-C is mean...
goto :eof
:sub1
echo Hello Bob
goto :eof
REM etc...

这是事实,但是,您需要列出您正在选择的与他们的选择编号匹配的值,否则它没有多大价值。但是,是的,如果你真的只需要选择并返回那个特定的值,那么你可以这样做。注意:您可能希望在每个选择标签中使用索引的字符,以防您最终更改了哪些字符的顺序,这样您就不会使用索引;I don’我也没有改变你的贝尔指数。正如我所说,我只是对你的答案加了一点,并概括了一些。我也会使用的概念!变量%count%!获得和匹配的东西和以后!变量%errorlevel%!。但这比OP实际要求的要多——他们可能会选择也可能不会选择使用。抱歉,编辑说明:您可能希望在每个选择标签中使用索引的字符,万一您最后更改了哪些字符的顺序,这样您就不必同时更改捆索引,即:Choice\u A而不是:Choice10,那么您可以`调用:Choice%\u所有选项:~%errorlevel%,1%如果你看一下OPs代码,他有一个要显示的值列表,并在循环中显示这些值,这表明他试图用[Choice][Value]创建loist,显然在他的代码中是不会的;我不能显示正确。所以这就是为什么我把它解释为一种意愿
这是问题的关键部分。顺便说一句,我喜欢你的用户名。太棒了!我很感激你能加入进来,就像我说的那样,如果你只需要给出一个选择列表,那么它会很有用,那绝对是最好的方法。只是让你理解为什么OpsQ真的想要更复杂的答案。不过,我想说,我的代码在技术上可能更通用,尽管我有一个习惯,就是不喜欢信任Errorlevel,因为它是自己的变量等等,我可能会收紧代码,但我主要是在我的手机上写的,有空时,我只是在我的电脑上快速测试了一下。所以,现在不是了;打字错误是一种胜利;这是事实,但是,您需要列出您正在选择的与他们的选择编号匹配的值,否则它没有多大价值。但是,是的,如果你真的只需要选择并返回那个特定的值,那么你可以这样做。注意:您可能希望在每个选择标签中使用索引的字符,以防您最终更改了哪些字符的顺序,这样您就不会使用索引;I don’我也没有改变你的贝尔指数。正如我所说,我只是对你的答案加了一点,并概括了一些。我也会使用的概念!变量%count%!获得和匹配的东西和以后!变量%errorlevel%!。但这比OP实际要求的要多——他们可能会选择也可能不会选择使用。抱歉,编辑说明:您可能希望在每个选择标签中使用索引的字符,万一您最后更改了哪些字符的顺序,这样您就不必同时更改捆索引,即:Choice\u A而不是:Choice10,那么您可以`调用:Choice%\u所有选项:~%errorlevel%,1%如果你看一下OPs代码,他有一个要显示的值列表,并在循环中显示这些值,这表明他试图用[Choice][Value]创建loist,显然在他的代码中是不会的;我不能显示正确。这就是为什么我把它解释为问题的一部分。顺便说一句,我喜欢你的用户名。太棒了!我很感激你能加入进来,就像我说的那样,如果你只需要给出一个选择列表,那么它会很有用,那绝对是最好的方法。只是让你理解为什么OpsQ真的想要更复杂的答案。不过,我想说,我的代码在技术上可能更通用,尽管我有一个习惯,就是不喜欢信任Errorlevel,因为它是自己的变量等等,我可能会收紧代码,但我主要是在我的手机上写的,有空时,我只是在我的电脑上快速测试了一下。所以,现在不是了;打字错误是一种胜利;