Batch file 如果比较不能正常工作

Batch file 如果比较不能正常工作,batch-file,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

我是批处理编程新手,目前有一个我不理解的问题。。。但也许这很容易

因此,我的目标是通过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
但是当我运行它的时候,第一个echo没有回显任何内容,但是第二个echo返回良好的模型,并且它没有回显测试OK,即使我手动添加了两个空格。。。如果if的比较结果是正确的

有人有主意吗


提前感谢您的帮助

您必须使用SETLOCAL ENABLEDELAYEDEXPANSION启动文件,如注释中所述。此外,您必须确保%model%将包含第一个赋值和!模型当前值。所以你应该使用!模特儿

您不需要将值赋给一个变量来回显它,因此,与其在循环中回显变量,不如回显for replacement参数。如果出于某种原因需要在同一循环内修改此值,则需要启用延迟扩展

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

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

您的if命令存在逻辑问题

if ("a"=="a") ...
意味着如果字符串a等于字符串a,那么它们当然不相等


如果有或没有传统空格,…

谢谢大家的回答

我刚刚添加了setLocalEnableDelayedExpansion,但它不起作用。 然后我移除了IF支架,它工作得很好


您的代码运行良好,非常感谢您的帮助和解释

有一些技巧-您需要在@ECHO ON之后设置SETLOCAL ENABLEDELAYEDEXPANSION以将%%i重新分配给模型,否则此分配将只计算一次。
if ("a"=="a") ...