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

[文本处理] 批处理获取可用盘符时判断errorlevel并屏蔽多余信息

有个需求,判断是否存在这个盘符的
  1. @echo off
  2. mountvol o: /L |find  /I "volume"
  3. if %errorlevel% EQU 1  echo no disk
  4. if %errorlevel% EQU 0  echo yes
复制代码


当我想判断多个盘符的时候,我用for做
  1. @echo off
  2. set list=o p q r s t e
  3. for %%i in (%list%) do (
  4. mountvol %%i: /L |find  /I "volume"
  5. if %errorlevel% EQU 1  echo no disk
  6. if %errorlevel% EQU 0  echo yes
  7. pause
  8. )
复制代码

这里发现errorlevel好像变成整个for的这行输出了


那么我又想到这样做
  1. @echo off
  2. set list=o p q r s t e
  3. for %%i in (%list%) do (
  4. set disk=%%i:
  5. call :xx
  6. pause
  7. )
  8. :xx
  9. rem echo %disk%
  10. mountvol %disk% /L |find  /I "volume"
  11. rem echo %disk% %errorlevel%
  12. if %errorlevel% EQU 1  echo %disk% no disk
  13. if %errorlevel% EQU 0  echo yes  
复制代码
这里是成功了。  但是......如何在for里面直接做呢?能否取得每个循环的errorlevel呢?


ok 我看看文章,又写了下面的
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set list=o p q r s t e
  4. for %%i in (%list%) do (
  5. mountvol %%i: /L |find  /I "volume"
  6. if !errorlevel! EQU 1  echo no disk
  7. if !errorlevel! EQU 0  echo yes
  8. pause
  9. )
复制代码
看来可以了。不过,只有e盘是存在的,所以mountvol e: /L |find  /I "volume" 的errorlevel是0,但是它也顺便把匹配值给输出了,这个能屏蔽吗?


不好意思
> nul 可以屏蔽输出   和unix的 > /dev/null类似。  我一直写shell的,刚写bat2天


另外问一下,各位有什么优化修改我的批处理的建议呀。谢谢啊

[ 本帖最后由 very_99 于 2009-5-24 05:26 编辑 ]

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "list=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  4. for %%i in (%list%) do (
  5.     mountvol %%i: /L|find /I "volume">nul
  6.     if !errorlevel! EQU 1 (echo %%i: no disk) else (echo %%i: yes )
  7. )
  8. pause
复制代码

TOP

建议使用if...else...

[ 本帖最后由 Batcher 于 2009-5-31 21:14 编辑 ]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表