【问题标题】:If statement inside a for loop (MS Batch)for 循环中的 if 语句(MS Batch)
【发布时间】:2013-12-15 14:51:25
【问题描述】:

我在编写以下脚本时遇到了一些问题:

@echo off
Setlocal EnableDelayedExpansion
set type=str
set idx=0
for /f "tokens=1*" %%a in (equipment.ini)  do (
    if !type! == str (
        set /a idx=!idx!+1
        set /a es.!idx!=%%a
        echo !es.!idx!!
        set type=int
    ) else (
        set /a ei.!idx!=%%a
        echo !ei.!idx!!
        set type=str
    )
)

脚本应该从文件设备.ini 中读取并将值保存在 2 个不同的变量中,每次重复 for 循环时这些变量都会切换。 %es.1% 将包含武器的名称,而 %ei.1% 将包含它的 ID 等等。

for 和 if 循环似乎可以正常工作,但回显值却没有。 从昨天晚上开始,我一直因为沮丧而沮丧,因为我知道解决方案可能很简单,但我只是在 atm 看不到它。

如果有人可以帮助我,将不胜感激。 谢谢!

【问题讨论】:

  • 你能否举一个你的equipment.ini的例子。
  • Test 1001 Test2 1002 Test3 1003 当然每次都是新行,但我不能放在评论区。

标签: loops batch-file if-statement for-loop echo


【解决方案1】:

试试这个:

@echo off
Setlocal EnableDelayedExpansion
set type=str
set idx=0
for /f "tokens=1*" %%a in (equipment.ini)  do (
    if !type! == str (
        set /a idx=!idx!+1
        set /a es.!idx!=%%a
        for %%# in (!idx!) do echo !es.%%#!
        set type=int
    ) else (
        set /a ei.!idx!=%%a
        for %%# in (!idx!) do echo !es.%%#!
        set type=str
    )
)

【讨论】:

  • 这行得通,但由于某种原因仅适用于 ei,因为 es 值由于某种原因保持为 0,即使在修复了示例中的小错误 (2x es) 之后也是如此
【解决方案2】:

试试

   call echo %%ei.!idx!%%

和它的伙伴...

【讨论】:

  • 这可行,但由于某种原因仅适用于 ei,因为 es 值由于某种原因保持为 0。
  • 您的数据test* 不是数字,因此set /a es.!idx!=%%a 会将变量设置为0。丢失/a
【解决方案3】:

试试这个

@echo off&cls
setlocal enabledelayedexpansion

set $count=1
for /f "tokens=1,2 delims= " %%a in ('type equipment.ini') do (set es!$count!=%%a
                                                               set ei!$count!=%%b
                                                               set /a $count+=1)

set e

如果您的设备.ini 具有这种格式,这将起作用:

test 1000
test1 1001
test2 1002
test3 1003

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多