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

批处理怎样判断errorlevel返回值?

[复制链接]
发表于 2012-5-10 22:37:59 | 显示全部楼层 |阅读模式
同事要我帮忙编一个IP扫描的批处理,自己尝试编了下面的代码,发现一个问题,
不管ping通不通都只写入到succeedList文本中,貌似errorlevel就没起到作用,
以前也遇到过,但是换另一种方式解决的,这个问题属于旧病,还请大侠拯救,为感~
  1. @echo off
  2. color 3f
  3. title IPscan
  4. set IPstart=
  5. set IPPool=
  6. set /p IPstart=请输入起始IP:
  7. set /p IPpool=请输入IP范围:
  8. echo=
  9. echo IP连通性检测中...

  10. for /F "tokens=1-4 delims=." %%a in ("%IPstart%") do (
  11. set AA=%%a
  12. set BB=%%b
  13. set CC=%%c
  14. set DD=%%d
  15. )

  16. set /a IPpools=%DD%+%IPpool%
  17. for /l %%i in (%DD%,1,%IPpools%) do (
  18. ping -n 1 %AA%.%BB%.%CC%.%%i>nul
  19. if %errorlevel% EQU 0 (
  20. echo %AA%.%BB%.%CC%.%%i>>succeedList.txt
  21. ) else (
  22. echo %AA%.%BB%.%CC%.%%i>>failedList.txt
  23. )
  24. )
  25. pause
复制代码
发表于 2012-5-10 22:49:42 | 显示全部楼层
你打算付多少钱?100还是1000?
发表于 2012-5-11 10:43:29 | 显示全部楼层
回复 2# gawk


    !!
发表于 2012-5-11 10:55:08 | 显示全部楼层
本帖最后由 neorobin 于 2012-5-11 11:10 编辑

回复 1# gobi918

楼主试下下面的, 第 3 行中的 TAB 字符 (ASCII 9) 可能被论坛处理成了若干空格, 可以自己编辑并还原, 但仅影响输出的格式.
  1. @echo off & setlocal enabledelayedexpansion & color 0a & mode con lines=2
  2. :remself 用 ping.exe 和 arp 来扫描和显示局域网活动 IP.
  3. set "TAB=        "
  4. set /a sendCnt=2
  5. set /p sendCnt=Please input the number of echo requests to send(default=!sendCnt!^):
  6. for /f "tokens=2 delims= " %%i in ('mode ^| findstr "列"') do set /a cols=%%i-11
  7. (set /a rate=0)&(set lastPct=)
  8. arp -d
  9. for /f "tokens=3-6 delims=.: " %%a in ('ipconfig /all^|find /i "default gateway"') do (
  10.   if "%%b" neq "" (
  11.     set "total=254"
  12.     for /f %%h in ("%%a.%%b.%%c.%%d") do set "IPDefaultGateway=%%h"
  13.     for /l %%v in (1,1,!total!) do (
  14.       start /b ping -n !sendCnt! %%a.%%b.%%c.%%v>nul
  15.       echo Pinging %%a.%%b.%%c.%%v...
  16.       set /a pct=%%v*100/total+1000
  17.       if "!pct:~0,2!" equ "10" (set pct= !pct:~2!) else set "pct=!pct:~1!"
  18.       set /a n=%%v*cols / total
  19.       if !n! gtr !rate! (call :reflesh) else if "!lastPct!" neq "!pct!" (call :reflesh)
  20.     )
  21.   )
  22. )

  23. echo. & title waiting...
  24. :wait
  25. 2>nul (
  26.   wmic process where "Caption='ping.exe'" get Caption|find /i /c "ping.EXE" && goto :wait
  27. )
  28. title PingScan 扫描完成.

  29. set /a cnt=1000
  30. >IPList (
  31.   echo 序号!TAB!IP 地址!TAB!!TAB!MAC 地址!TAB!!TAB!!TAB!主机名
  32.   echo ===============================================================
  33.   for /f "tokens=2" %%m in ('arp -a^|findstr /ic:"!IPDefaultGateway! "') do (
  34.     echo !cnt:~-3!!TAB!!IPDefaultGateway!!TAB!%%m!TAB!"网关"
  35.   )
  36.   set /a cnt+=1
  37.   for /f "tokens=2 delims=[]" %%t in ('ping -n 1 %computername% ^| find "["') do (
  38.     for /f "tokens=4" %%m in ('nbtstat -a "!computername!"^|findstr /ic:"MAC Address"') do (
  39.       for /f "delims=" %%M in ("%%m") do echo !cnt:~-3!★!TAB!%%t!TAB!%%M!TAB!!computername!
  40.     )
  41.   )

  42.   for /f "tokens=1-2" %%a in ('arp -a^|findstr /ic:"dynamic"') do (
  43.     if not "%%a"=="!IPDefaultGateway!" (
  44.       for /f "delims=<" %%H in ('nbtstat -A %%a^|findstr /ic:"<00>  UNIQUE"') do (
  45.         set /a cnt+=1
  46.         set hostname=%%H
  47.         call :trim hostname
  48.         echo !cnt:~-3!!TAB!%%a!TAB!%%b!TAB!!hostname!
  49.       )
  50.     )
  51.   )
  52. )
  53. start notepad IPList
  54. echo. & (<nul set /p=PingScan 扫描完成. 任意键退出...) & >nul pause
  55. del IPList
  56. exit /b

  57. :reflesh
  58. set "tt=!pct!%%"&(for /l %%j in (1,1,!rate!) do set tt=!tt!^>)&(title !tt!)
  59. set /a rate=n
  60. set "lastPct=!pct!"
  61. exit /b

  62. :trim strVar
  63. if "!%1:~-1!" equ " " set "%1=!%1:~0,-1!" & call :trim %1
  64. if "!%1:~0,1!" equ " " set "%1=!%1:~1!" & call :trim %1
  65. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
gobi918 + 1 感謝分享~

查看全部评分

发表于 2012-5-12 19:29:01 | 显示全部楼层

获取制表符
  1. @echo off
  2. for /f "delims=U" %%a in ('cmd/u/cecho 唉')do set $09=%%a
  3. echo %$09%///////////
  4. pause
复制代码
顺便做个推广:更多字符获取 bathome.net 搜索关键字ascmap,或ascii
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 02:13 , Processed in 0.014934 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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