Batch file 如何避免在批处理中使用一堆IF语句

Batch file 如何避免在批处理中使用一堆IF语句,batch-file,cmd,Batch File,Cmd,因此,我正在创建我的第一批文件,我相信有更好的方法。看来我可以实现我想要的,但从我读到的所有惯例来看,这似乎是草率的 @echo off set /p xyzCode= Please enter the code. set x=0001 set xyz=0002 set xyza=0003 if %xyzCode% ==x echo %x% 问题是我需要大约600个变量,600个if语句 在我工作的地方,产品有两个唯一标识符:代码和装备标识符 我希望能够快速输入代码并获取装备标识符 如果

因此,我正在创建我的第一批文件,我相信有更好的方法。看来我可以实现我想要的,但从我读到的所有惯例来看,这似乎是草率的

@echo off

set /p xyzCode= Please enter the code.

set x=0001
set xyz=0002
set xyza=0003

if %xyzCode% ==x echo %x%
问题是我需要大约600个变量,600个if语句

在我工作的地方,产品有两个唯一标识符:代码和装备标识符

我希望能够快速输入代码并获取装备标识符


如果我使用Python,我想答案应该是使用dicts,但需要一种在批处理脚本中实现这一点的方法。

听起来像是开关盒的工作


它仍然会占用很多空间,但我相信它们比IF语句要快得多

听起来像是开关盒的工作


它仍然会占用大量空间,但我相信它们比IF语句快得多。您可以尝试保留一个单独的文本或csv文件,其中包含所有代码和标识符,如下所示:

@echo off
set /p xyzCode= Please enter the code:
for /f "skip=1 tokens=1,2 delims=, usebackq" %%a IN ("Code&ItemList.txt") do (
    if %xyzCode%==%%a echo Material ID is %%b
)
code&ItemList.txt

  Code, Material Id
  0001, Abcd
  0123, Qwerty
  4567, Zxcvb
然后,您可以编写如下的批处理脚本:

@echo off
set /p xyzCode= Please enter the code:
for /f "skip=1 tokens=1,2 delims=, usebackq" %%a IN ("Code&ItemList.txt") do (
    if %xyzCode%==%%a echo Material ID is %%b
)

键入
以获取/?
以了解其工作原理和原因。

您可以尝试保留一个包含所有代码和标识符的单独文本或csv文件,如下所示:

@echo off
set /p xyzCode= Please enter the code:
for /f "skip=1 tokens=1,2 delims=, usebackq" %%a IN ("Code&ItemList.txt") do (
    if %xyzCode%==%%a echo Material ID is %%b
)
code&ItemList.txt

  Code, Material Id
  0001, Abcd
  0123, Qwerty
  4567, Zxcvb
然后,您可以编写如下的批处理脚本:

@echo off
set /p xyzCode= Please enter the code:
for /f "skip=1 tokens=1,2 delims=, usebackq" %%a IN ("Code&ItemList.txt") do (
    if %xyzCode%==%%a echo Material ID is %%b
)

键入
以获取/?
了解其工作原理和原因。

如果我理解正确,我认为您可以使用延迟扩展来完成您想要的操作

在脚本顶部添加
SETLOCAL ENABLEDELAYEDEXPANSION
。然后,添加
echo!%xyzCode%显示您输入的代码值

像这样:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

set /p xyzCode=Please enter the code. 

set x=0001
set xyz=0002
set xyza=0003

echo !%xyzCode%!

这样,您就不需要为每个可能的代码都使用
IF
语句。如果输入
xyz
,此脚本将显示名为
xyz

的变量的值。如果我理解正确,我认为您可以使用延迟扩展来执行所需操作

在脚本顶部添加
SETLOCAL ENABLEDELAYEDEXPANSION
。然后,添加
echo!%xyzCode%显示您输入的代码值

像这样:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

set /p xyzCode=Please enter the code. 

set x=0001
set xyz=0002
set xyza=0003

echo !%xyzCode%!

这样,您就不需要为每个可能的代码都使用
IF
语句。如果输入
xyz
,此脚本将显示名为
xyz

的变量的值。此问题可能与此问题重复。此问题可能与此解决方案中使用的称为数组的概念重复,并在@Aacini处进行了详细说明。我在回答中未看到任何数组。没有基本名称或索引值,但似乎是具有关联值的随机代码。所以xyzCode有点像一个指针,指向一个有值的变量。@dbenham:From:“在计算机科学中,数组数据结构,或者简单地说是数组,是由一组元素(值或变量)组成的数据结构,每个元素至少由一个数组索引或键标识。”“术语数组。。。由一组值或变量组成,这些值或变量可由运行时计算的一个或多个索引选择。@Aacini-您引用的定义符合我的理解,也与我的评论一致。如果变量的名称类似于
cd.x
cd.xyz
cd.xyza
,或
cd[x]
cd[xyz]
cd[xyza]
,那么我同意它们是作为关联数组运行的。但这不是代码中的内容。@Aacini-我只需要您提供的定义。我们不同意的关键概念是“集合”一词"。添加名为
abc
xxx
foo
的其他变量。哪些变量被视为同一数组集合的一部分?在我对定义的解释中,数组需要一些基本名称或符号来标识集合,此外,还需要指定集合中单个元素的索引ion。如果你看不到我的观点,那么我想我们将不得不同意不同意,这不是第一次。你在这个解决方案中使用的概念叫做数组,在@Aacini中有充分的解释-我在这个答案中没有看到任何数组。没有基名称或索引值,但似乎有关联值的随机代码。所以xyzCode是有点像指向带值变量的指针。@dbenham:From:“在计算机科学中,数组数据结构,或简称数组,是由元素(值或变量)集合组成的数据结构,每个元素至少由一个数组索引或键标识。”以及“术语数组…由一组值或变量组成,这些值或变量可由运行时计算的一个或多个索引选择”。@Aacini-您引用的定义符合我的理解,也与我的评论一致。如果变量的名称类似于
cd.x
cd.xyz
cd.xyza
,或
cd[x] 
cd[xyz]
cd[xyza]
,那么我同意它们是作为关联数组运行的。但这不是代码中的内容。@Aacini-我只需要您提供的定义。我们不同意的关键概念是“集合”一词"。添加名为
abc
xxx
foo
的其他变量。哪些变量被视为同一数组集合的一部分?在我对定义的解释中,数组需要一些基本名称或符号来标识集合,此外,还需要指定集合中单个元素的索引ion.如果你看不到我的观点,那么我想我们将不得不同意不同意,这不是第一次。嗨,韦斯,我真的很喜欢这个想法,我已经把你的答案复制到了一个.bat文件中,现在正在玩它。我必须确切地了解它意味着什么。哈哈。我想这最终会解决我的问题。我想彻底理解第二,学习为政治家准备的知识