如果比较不正常

时间:2014-11-12 11:33:45

标签: batch-file

我是批处理编程的新手,我目前遇到一个我不明白的问题......但也许这很容易。

所以我的目标是通过“wmic csproduct get name”命令获取我的PC模型。它返回3行,第二行是我想要的(PC模型),但它在行的末尾添加了两个空格。

所以我使用了这段代码:

@ECHO ON
FOR /F "usebackq delims=, skip=1" %%i IN (`wmic csproduct get name`) DO (
    SET "model=%%i"
    echo "%model%"
    goto next
    )

:next
echo The command returns %model%
IF("%model%"=="Precision WorkStation T3400  ") (echo TEST OK)
pause
goto eof

但是当我运行它时,第一个回声不会回显任何东西,但是第二个回声返回好的模型并且即使我手动添加两个空格也不会回显TEST OK ...如果IF比较似乎没事......

有人有想法吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您必须使用SETLOCAL ENABLEDELAYEDEXPANSION启动文件,如评论中已提到的那样。此外,您必须设置%model%将包含第一个指定值!model! 当前值。因此,您应该使用 !model!

答案 1 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "skip=1 tokens=2 delims==" %%i in (
        'wmic csproduct get name /value'
    ) do for %%a in ("%%i") do (
        SET "model=%%~a"
        echo %%~a
    )

    echo The command returns [%model%]
    IF "%model%"=="Precision WorkStation T3400" (echo TEST OK)

    pause

您不需要将值分配给变量只是为了回显它,因此,不是回显循环内的变量,而是回显for可替换参数。如果由于某种原因需要在同一循环内修改此值,则需要启用延迟扩展。

wmic查询已更改为以key=value格式返回数据,for已配置为使用=作为分隔符拆分行并检索第二行令牌。

此外,由于wmic的输出在值的末尾包含一个额外的回车符,因此包含一个额外的for循环以从变量中删除此字符。

并且您的if命令存在逻辑问题

if ("a"=="a") ...
如果字符串("a"等于字符串"a") ,则

表示,当然它们不相等。

如果它有或没有附加空格,......

答案 2 :(得分:0)

谢谢大家的回答。

我刚刚添加了SETLOCAL ENABLEDELAYEDEXPANSION,但它无效。 然后我删除了IF括号,效果很好!

您的代码运行良好以及MC ND,非常感谢您的帮助和解释!