Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1733805
  • 博文数量: 163
  • 博客积分: 10591
  • 博客等级: 上将
  • 技术积分: 1980
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-08 18:17
文章分类

全部博文(163)

文章存档

2018年(1)

2012年(1)

2011年(47)

2010年(58)

2009年(21)

2008年(35)

分类: WINDOWS

2010-07-05 15:04:41

下面有一个批处理文件,内容如下:  

@echo off

netstat -na | findstr /C:":80" > port.txt

for /F "tokens=2 usebackq" %%j in (port.txt) do (

echo %%j

echo %errorlevel%

echo %%j | findstr /C:":80" > null

IF %ERRORLEVEL%==0 goto ok

)

 

goto bad

 

:ok

echo "Port 80 is exsit"

goto end

 

:bad

echo "Port 80 is not exsit"

 

:end exit


本来想通过此批处理,来检查机器上是否开启了80端口,如果有则显示Port 80 is exsit,如果没有则显示Port 80 is not exsit。可当我在一台根本没有启动80端口的机器上执行时,也总是显示Port 80 is exsit。为了调试,我将脚本改为如下 

@echo off 

netstat -na | findstr /C:":80" > port.txt
for /F "tokens=2 usebackq" %%j in (port.txt) do (
echo %%j
echo %ERRORLEVEL%
echo %%j | findstr /C:":80" > null
echo %ERRORLEVEL%

)


执行后,会发现ERRORLEVEL打出来的值总为0(也有可能总为1)。那么怎么解决呢,我们把脚本改成如下,就没有问题了

@echo off
setlocal enabledelayedexpansion
netstat -na | findstr /C:":80" > port.txt

for /F "tokens=2 usebackq" %%j in (port.txt) do (
echo %%j
echo !errorlevel!
echo %%j | findstr /C:":80" > null
IF !ERRORLEVEL!==0 goto ok
)

goto bad

:ok
echo "Port 80 is exsit"
goto end

:bad
echo "Port 80 is not exsit"

:end exit


这样写就没有问题了,这个问题就是涉及到变量延迟的问题。请参考变量延迟详解。
阅读(4703) | 评论(0) | 转发(0) |
0

上一篇:Perl fork()

下一篇:变量延迟详解

给主人留下些什么吧!~~