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

[其他] 【已解决】批处理中WMIC获取PDCOMP驱动名时这个%%a等于多少?

  1. @echo off
  2. for /f "usebackq skip=1 delims=" %%a in (
  3. `"wmic sysdriver where name="PDCOMP" get pathname"`
  4. ) do (
  5. if "%%a" == "" (
  6. echo y
  7. ) else (
  8. echo n
  9. )
  10. )
  11. pause
复制代码
注:PDCOMP是本机的一个驱动名,但是没有文件路径
用上面的脚本,可以判断 %%a 不是为空,但是它究竟是多少呢??

[ 本帖最后由 lxzzr 于 2009-4-15 22:58 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

10个空格
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 2楼 的帖子

不对哦!!呵呵

TOP

与字符编码有关,CMD对编码的支持不是很好。
比如以前的reg命令“吃字符”问题,前不几还有一个帖子提到了“不可见字符”问题(一时没有找到)。
有些命令的输出是Unicode格式,会导致一些问题。
  1. @echo off
  2. for /f "usebackq skip=1 delims=" %%a in (
  3. `"wmic sysdriver where name="PDCOMP" get pathname"`
  4. ) do (
  5.     if "%%a" == "          " echo y
  6.     set var=%%a
  7. )
  8. if "%var%"=="          " echo y
  9. pause
复制代码
%%a的值可能包含不可见字符,而%var%的值是10个空格。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

请参考get参数 /value

TOP

即使加/value开关也一样,输出还是Unicode格式,仍然有编码问题。
而且加了/value开关结果竟然不同?

C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @echo.%a
c:\boot.ini
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name /value') do @echo.%a
(空行)
Name=c:\boot.ini
(空行)
(空行)
C:\>for /f "skip=1 tokens=2 delims==" %a in ('wmic datafile where "name='c:\\boot.ini'" get name /value') do @echo.%a
c:\boot.ini
C:\>rem 还有以前讨论过的不可见字符问题:
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @echo.%a-
-:\boot.ini
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @echo.%~dpa-
c:\-
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @echo.%~fa-
-:\boot.ini
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @echo.%a-|find /v ""
c:\boot.ini  -
C:\>for /f "tokens=2 delims==" %a in ('wmic datafile where "name='c:\\boot.ini'" get name /value^|find /i ":"') do @echo %a-|find /v ""
c:\boot.ini-
C:\>for /f "skip=1 delims=" %a in ('wmic datafile where "name='c:\\boot.ini'" get name') do @call echo.%a-
c:\boot.ini  -
C:\>for /f "tokens=2 delims==" %a in ('wmic datafile where "name='c:\\boot.ini'" get name /value^|find /i ":"') do @call echo %a-
c:\boot.ini-
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

第1种方法
  1. @echo off
  2. for /f "usebackq skip=1 delims=" %%a in (
  3. `"wmic sysdriver where name="PDCOMP" get pathname"`
  4. ) do (
  5.     call :slz %%a
  6. )
  7. pause&exit
  8. :slz
  9. echo."%1"
复制代码

第2种方法
  1. @echo off
  2. for /f "usebackq skip=1 delims=" %%a in (
  3. `"wmic sysdriver where name="PDCOMP" get pathname/value"`
  4. ) do (
  5.     set %%a>nul
  6. )
  7. echo "%pathname%"
  8. pause
复制代码

TOP

曾经有讨论过
以上2种方法都可行,但是输出内容包含特殊字符2种方法都不行。所以用wmic时有不可以见字符和特殊字符代码很难实现完美。我在写脚本备份&还原驱动时已经伤了很多脑细胞了,在http://bbs.bathome.net/viewthread.php?tid=743&page=1#pid3036 13楼中还使用了/format:csv参数,但这个参数在输出包含特殊字符“&”会变成“&”

[ 本帖最后由 fastslz 于 2009-4-15 21:36 编辑 ]

TOP

楼上的正解!!!!

TOP

返回列表