[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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.为什么会产生这种问题?(产生这种问题的原理是什么?)

因为=和,都是参数的分隔符,而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

评分人数

TOP

本帖最后由 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再以%*的方式获取参数,以前没想这么深。

TOP

悲剧,我知道我为什么这次打对了引号却没有正确显示的原因了——我把u盘拔了……

不过这次更加深了对= , 作为分隔符的印象。
多谢zm900612

TOP

https://www.it1352.com/1966062.html
对于带Wmic的/F有害输出
文中有原因分析和通用的解决方案。

TOP

返回列表