【问题标题】:Windows Batch: If condition is not validatedWindows Batch:如果条件未得到验证
【发布时间】:2017-05-03 04:40:29
【问题描述】:

这是我的代码

ECHO off
CLS
ECHO List of VMs:
ECHO .............
cd /D "F:\VMs"
setlocal enabledelayedexpansion
set num=0
for /f "tokens=*" %%i in ('dir /s/b *.vmx') do set /a num+=1&set VM[!num!]=%%i 
set numberOfVMs=0
for /F "tokens=2 delims==" %%s in ('set VM[') do (
    set /a numberOfVMs+=1
    echo !numberOfVMs! -^> %%s
)
ECHO.
ECHO List of Running VMs:
ECHO .....................
set num=-1
for /f "tokens=*" %%i in ('vmrun -T ws list') do (
    set /a num+=1
    if !num! NEQ 0 set RUNNINGVM[!num!]=%%i
)
set numberOfRunningVMs=0
for /F "tokens=2 delims==" %%s in ('set RUNNINGVM[') do (
    set /a numberOfRunningVMs+=1
    echo !numberOfRunningVMs! -^> %%s
)
ECHO.
ECHO List of Available VMs:
ECHO .......................
for /l %%x in (1, 1, %numberOfVMs%) do ( 
    ::echo !VM[%%x]!
    for /l %%y in (1, 1, %numberOfRunningVMs%) do (
            echo !VM[%%x]!
            echo !RUNNINGVM[%%y]!
        if "!VM[%%x]!"=="!RUNNINGVM[%%y]!" (
            echo "success"
        )
    )
)

数组变量“VM”具有以下值:

F:\VMs\PD-UI-Tests-Win10-x64-Office2016-32bit.vmwarevm\Windows-10-x64.vmx

F:\VMs\PD-UI-Tests-Win10-x64-Office2016-64bit.vmwarevm\Windows-10-x64.vmx

F:\VMs\PD-UI-Tests-Win7-x64-Office2013-32bit.vmwarevm\Windows7-x64-RTM.vmx

数组变量 'RUNNINGVM' 具有以下值:

F:\VMs\PD-UI-Tests-Win7-x64-Office2013-32bit.vmwarevm\Windows7-x64-RTM.vmx

但是,尽管 VM[3] 等于 RUNNINGVM[1],但最终的 if 条件永远不会变为“真”。我错过了什么?请帮忙

【问题讨论】:

  • 输出是什么?如果您在“可用虚拟机列表:”之后立即打开回显,这会显示什么有趣的东西吗?

标签: batch-file command-line


【解决方案1】:

不要在代码块中使用::-style cmets,因为它实际上是一个损坏的标签,而标签会破坏代码块。请改用rem

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2017-09-02
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多