找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19816|回复: 2

[系统相关] [分享]批处理if语句括号内变量包含括号文本无法执行解决方法

[复制链接]
发表于 2022-2-14 21:40:45 | 显示全部楼层 |阅读模式
本帖最后由 yakeyun 于 2022-2-15 18:53 编辑

具体代码如下,第一个截取位置如图所示,可以正常显示,但是后面判断部分就会闪退,把变量%zbname%删除后,就可以正常跳转。
  1. @echo off&setlocal enabledelayedexpansion

  2. for /f "delims== tokens=1,*" %%x in ('wmic baseboard get Product^/value ^|find "="') do set "zbname=%%y"
  3. for /f "delims== tokens=1,*" %%i in ('wmic baseboard get manufacturer^/value ^|find "="') do set "name=%%j"
  4. echo 我是微星%zbname%主板,商家标识:%name%
  5. pause

  6. if "%name%" =="MSI" (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)
  7. if "%name%"=="Micro-Star International Co., Ltd." (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)

  8. :MSI
  9. echo ok
  10. pause
复制代码



遇到这种情况只需要把变量的%号替换为!,即可解决。



测试发现!!对于变量名太长的(第二种情况变量),不太友好,会导致输出结果另提一行,或者变量显示顺序被打乱。

修改前显示:
我是微星PRO Z690-P DDR4 (MS-7D36)
主板,商家标识:Micro-Star International Co., Ltd.  
修改后显示:
我是微星"PRO Z690-P DDR4 (MS-7D36)"主板,商家标识:Micro-Star International Co., Ltd.

还是用%%,外面加双引号可以完美解决。即:
  1. @echo off&setlocal enabledelayedexpansion

  2. for /f "delims== tokens=1,*" %%x in ('wmic baseboard get Product^/value ^|find "="') do set "zbname=%%y"
  3. for /f "delims== tokens=1,*" %%i in ('wmic baseboard get manufacturer^/value ^|find "="') do set "name=%%j"
  4. echo 我是微星%zbname%主板,商家标识:%name%
  5. pause

  6. if "%name%" =="MSI" (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)
  7. if "%name%"=="Micro-Star International Co., Ltd." (echo 我是微星"%zbname%"主板,商家标识:%name% >>.\log.log & goto MSI)

  8. :MSI
  9. echo ok
  10. pause
复制代码
 楼主| 发表于 2022-2-15 14:06:08 | 显示全部楼层
回复 2# qixiaobin0715


需要替换,不然会闪退。2代主板和6代主板都测试过了。
发表于 2022-2-15 23:09:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:04 , Processed in 0.020768 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表