Batch file 批处理脚本:将数组值与数值进行比较

Batch file 批处理脚本:将数组值与数值进行比较,batch-file,Batch File,总体目标是,我想编写一个批处理脚本,我可以传递两个参数——一个广告组和一个包含用户列表的文本文件的位置。然后,完成的数据将传递到另一个系统中的API,以便导入以管理其他组,如邮件列表等 困难在于:我想在批处理脚本中将数组值与数值变量进行比较,最好不要使用延迟扩展 这将允许我创建一个“气泡比较”,在这里我可以根据现有文件中已有的值检查每个新条目,然后将条目附加到主列表中,或者如果它已经存在,则不处理它 我正在尝试在不使用延迟扩展的情况下执行此操作。我突然想到,如果不延迟扩展,可能无法以这种方式使用

总体目标是,我想编写一个批处理脚本,我可以传递两个参数——一个广告组和一个包含用户列表的文本文件的位置。然后,完成的数据将传递到另一个系统中的API,以便导入以管理其他组,如邮件列表等

困难在于:我想在批处理脚本中将数组值与数值变量进行比较,最好不要使用延迟扩展

这将允许我创建一个“气泡比较”,在这里我可以根据现有文件中已有的值检查每个新条目,然后将条目附加到主列表中,或者如果它已经存在,则不处理它

我正在尝试在不使用延迟扩展的情况下执行此操作。我突然想到,如果不延迟扩展,可能无法以这种方式使用阵列。是否可以在不使用延迟扩展的情况下比较递增的数组值

FOR /L %%a IN (0,1,9) DO (
CALL SET numbers[%%a%%]=%%a
)
SET /A i=0
:startLoop
IF "%numbers[%i%]%" EQU "%i%" DO (
ECHO "%i% exists!"
set /A i=%i%+1
GOTO startLoop
)
ELSE ( ECHO "The list has finished at %i%")

您的代码中存在一些问题:

  • 呼叫集号码[%%a%%]=%%a
    应为
    呼叫集“号码[%%a]=%%a”
    (此处无需呼叫)
  • if
    子句中没有
    do
  • 如果“%numbers[%i%]%等于“%i%”
    尝试展开(不存在)变量
    编号[
    ]
    <如果“%%数字[%i%]%%”等式“%i%”不起作用,则代码>调用,因为
    调用
    不能与
    if
    一起使用;但是您可以执行
    调用集“临时=%%数字[%i%]%%”
    然后
    如果“%临时%”等于“%i%”
  • set/A i=%i%+1
    应为
    set/A“i+=1”
  • )否则(
    必须在一行中
总而言之,这意味着:

(0,1,9)do中/L%%a的
(
设置“数字[%%a]=%%a”
)
设置/A“i=0”
:吓一跳
呼叫集“临时=%%号码[%i%]%%”
如果“%i%”等于“%i%”(
回显%i%存在
设置/A“i+=1”
后藤:哇
)否则(
回显列表已在%i%完成
)

你为什么不能使用
延迟展开
?@GerhardBarnard这只是一个学习练习,我现在还不打算在这里使用它!@r4mulus,因为这只是一个学习练习,你必须知道你要做什么。不幸的是,你只告诉我们你想将数组值与数字进行比较,并提供了一些代码。你知道吗没有解释您自己设置的任务,也没有解释代码与该任务相关的功能。您的脚本显然有问题,但除非您解释您特别需要我们帮助的内容,否则您的问题是离题的,我们将无法帮助您。@Compo我没有意识到有关me的问题语言的机制不在堆栈溢出的范围内-我很抱歉!现在将编辑问题。@r4mulus,您发布的代码似乎与现在编辑的问题没有任何关系。您的问题太广泛,因为您似乎在寻求所有方面的帮助。您需要将您的任务分解为小块,并完成每个部分例如,你提到一个数组,你成功地创建了一个数组吗?这是你的问题吗?你提到你的脚本接受两个参数,它在代码中的什么地方这样做?这是你的问题吗?你也提到了,数值变量,但我只看到字符串;请澄清。I感谢您的帮助,@aschipfl!虽然每次我都被甩到else语句中,但比较(关系)似乎不起作用。
设置“临时=%%数字[%I%]%%”
语句在我的编辑器中被标记为有问题…@r4mulus,将
for
循环中的
call
替换为
set
,然后再试一次。@r4mulus,在标签
下方注意到另一个问题:startoop
。尝试
设置“临时=%%数字[%i%]%%”
调用集“临时=%%数字[%i%]%%”
@michael_heath该死-就是这样-我已经放弃了,因为这是不可能的!非常感谢!!!感谢你指出错误,@michael_heath,我刚刚修复了它们。。。