下面有一个批处理文件,内容如下:
@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
|
这样写就没有问题了,这个问题就是涉及到变量延迟的问题。请参考变量延迟详解。
阅读(4691) | 评论(0) | 转发(0) |