如何将字母顺序添加到菜单或选项

问题描述 投票:0回答:2

我已经知道如何将字母序列添加到菜单中(使用 ExitCodeAscii link),但这种方法会使输出变慢。

有人知道用简单代码更快的方法吗?

我已经尝试过这段代码:(只是示例)

@echo off
set "AZ1=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "AZ2=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
set "menu= one two three four five"
for %%A in (%AZ2%) do for %%M in (%menu%) do echo [%%A] %%M
pause

输出:

[A] one
[A] two
[A] three
[A] four
[A] five
[B] one
[B] two
[B] three
etc...

我想要输出:

[A] one
[B] two
[C] three
[D] four
[E] five
batch-file
2个回答
1
投票

每次运行外部循环时都会执行内部

for
循环。你不想这样。
保留使用计数器的原始方法,但不使用计数器本身,而是使用它从字母字符串中提取单个字符:

@echo off
setlocal enabledelayedexpansion
set "AZ1= ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "menu= one two three four five"
set count=0
for %%M in (%menu%) do (
  set /a count+=1
  call echo [%%AZ1:~!count!,1%%]  %%M
)

0
投票
@ECHO OFF
SETLOCAL
set "AZ1=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "AZ2=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
set "menu= one two three four five"
for %%M in (%menu%) do SET "assign=y"&for %%A in (%AZ2%) do IF DEFINED assign IF NOT DEFINED option[%%A] SET option[%%A]=%%M&SET "assign="&ECHO [%%A] %%M
SET option

GOTO :EOF

通常的做法是在初始

setlocal
之后直接使用
@echo off
命令。这会丢弃批处理结束时对环境所做的任何更改,因此由一个批处理文件建立的变量不会影响可能在同一会话中运行的任何其他批处理。

如果您从“快捷方式”运行,错误消息将不可见(它们会出现,但批处理会继续并清除它们)。您可以在语句后放置

pause
并返回错误,但最好打开“命令提示符”并从那里运行批处理,以便窗口保持打开状态并显示任何(错误)消息.

© www.soinside.com 2019 - 2024. All rights reserved.