如何避免批量使用一堆IF语句

时间:2016-02-23 19:45:35

标签: 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语句。

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

我希望能够快速输入代码并获取物资标识符。

如果我使用Python,我认为答案是使用dicts,但需要一种方法在批处理脚本中执行此操作。

3 个答案:

答案 0 :(得分:1)

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

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
)

输入for /?以解释其工作原理和原因。

答案 1 :(得分:1)

如果我理解正确,我认为你可以使用延迟扩展来做你想做的事。

在脚本顶部添加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的变量的值。

答案 2 :(得分:0)

听起来像是一个开关案例的工作

switch statement equivalent in windows batch file

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

相关问题