标题: [系统相关] [分享]批处理if语句括号内变量包含括号文本无法执行解决方法 [打印本页]
作者: yakeyun 时间: 2022-2-14 21:40 标题: [分享]批处理if语句括号内变量包含括号文本无法执行解决方法
本帖最后由 yakeyun 于 2022-2-15 18:53 编辑
具体代码如下,第一个截取位置如图所示,可以正常显示,但是后面判断部分就会闪退,把变量%zbname%删除后,就可以正常跳转。- @echo off&setlocal enabledelayedexpansion
-
- for /f "delims== tokens=1,*" %%x in ('wmic baseboard get Product^/value ^|find "="') do set "zbname=%%y"
- for /f "delims== tokens=1,*" %%i in ('wmic baseboard get manufacturer^/value ^|find "="') do set "name=%%j"
- echo 我是微星%zbname%主板,商家标识:%name%
- pause
-
- if "%name%" =="MSI" (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)
- if "%name%"=="Micro-Star International Co., Ltd." (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)
-
- :MSI
- echo ok
- pause
复制代码
遇到这种情况只需要把变量的%号替换为!,即可解决。
测试发现!!对于变量名太长的(第二种情况变量),不太友好,会导致输出结果另提一行,或者变量显示顺序被打乱。
修改前显示:
我是微星PRO Z690-P DDR4 (MS-7D36)
主板,商家标识:Micro-Star International Co., Ltd.
修改后显示:
我是微星"PRO Z690-P DDR4 (MS-7D36)"主板,商家标识:Micro-Star International Co., Ltd.
还是用%%,外面加双引号可以完美解决。即:- @echo off&setlocal enabledelayedexpansion
-
- for /f "delims== tokens=1,*" %%x in ('wmic baseboard get Product^/value ^|find "="') do set "zbname=%%y"
- for /f "delims== tokens=1,*" %%i in ('wmic baseboard get manufacturer^/value ^|find "="') do set "name=%%j"
- echo 我是微星%zbname%主板,商家标识:%name%
- pause
-
- if "%name%" =="MSI" (echo 我是微星%zbname%主板,商家标识:%name% >>.\log.log & goto MSI)
- if "%name%"=="Micro-Star International Co., Ltd." (echo 我是微星"%zbname%"主板,商家标识:%name% >>.\log.log & goto MSI)
-
- :MSI
- echo ok
- pause
复制代码
作者: yakeyun 时间: 2022-2-15 14:06
回复 2# qixiaobin0715
需要替换,不然会闪退。2代主板和6代主板都测试过了。
作者: Batcher 时间: 2022-2-15 23:09
回复 2# yakeyun
参考:批处理调用WMIC时如何处理结果中的特殊字符?
http://bbs.bathome.net/thread-2862-1-1.html
http://bbs.bathome.net/thread-28534-1-1.html
http://bbs.bathome.net/thread-28535-1-1.html
http://bbs.bathome.net/thread-12033-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |