Board logo

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

作者: very_99    时间: 2009-5-24 03:00     标题: 批处理获取可用盘符时判断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 编辑 ]
作者: Batcher    时间: 2009-5-24 03:08

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

[ 本帖最后由 Batcher 于 2009-5-31 21:14 编辑 ]
作者: shqf    时间: 2009-5-31 20:36

  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
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2