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

[特效代码] [已解决]wmic命令在批处理for中为何出错?

[复制链接]
发表于 2011-5-18 17:40:06 | 显示全部楼层 |阅读模式
  1. wmic logicaldisk where drivetype=2 get deviceid,size
复制代码
查询本机的移动硬盘,这个是没问题的。
  1. @echo off
  2. for /f "delims=" %%i in ('wmic logicaldisk where drivetype=2 get deviceid,size') do echo %%i
  3. pause>nul
复制代码
放在for中就会出错——2 - Invalid alias verb(无效的别名动词).
  1. @echo off
  2. for /f "delims=" %%i in ('wmic logicaldisk where drivetype="2" get deviceid,size') do echo %%i
  3. pause>nul
复制代码
为2打上引号,还是出错——2 - Invalid alias verb.

这种问题我以前遇到过,当时乱打了一次引号把什么类容引起来就解决了。

1.这问题怎么解决?
2.为什么会产生这种问题?(产生这种问题的原理是什么?)
发表于 2011-5-18 18:21:35 | 显示全部楼层
因为=和,都是参数的分隔符,而for输入的实质是把其中的内容当作参数传递给cmd,所以cmd会先按照参数的划分方式来进行划分
解决方案一:
  1. @echo off
  2. for /f "delims=" %%i in ('wmic logicaldisk where drivetype^=2 get deviceid^,size') do echo %%i
  3. pause>nul
复制代码
解决方案二:
  1. @echo off
  2. for /f "delims=" %%i in ('"wmic logicaldisk where drivetype=2 get deviceid,size"') do echo %%i
  3. pause>nul
复制代码

评分

参与人数 2技术 +2 收起 理由
77七 + 1 感谢分享
Hello123World + 1 犀利!

查看全部评分

发表于 2011-5-18 18:26:46 | 显示全部楼层
本帖最后由 zm900612 于 2011-5-18 18:48 编辑

刚才考虑了一下,2楼说法欠妥,出错不是出在被cmd划分参数的时候,而是出现在for的预处理时:
  1. for /f "delims=" %%a in ('echo 123,234=345') do echo %%a
  2. pause
复制代码
运行一下就明白了,for预处理时,把即没有被转义又没有被""包起来的分割符转换为空格,然后再传递给cmd,cmd再以%*的方式获取参数,以前没想这么深。
 楼主| 发表于 2011-5-18 18:26:54 | 显示全部楼层
悲剧,我知道我为什么这次打对了引号却没有正确显示的原因了——我把u盘拔了……

不过这次更加深了对= , 作为分隔符的印象。
多谢zm900612
发表于 2023-9-22 11:11:41 | 显示全部楼层
https://www.it1352.com/1966062.html
对于带Wmic的/F有害输出
文中有原因分析和通用的解决方案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 10:33 , Processed in 0.020618 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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