0
@echo off
set /p ipAddress="enter Ip address"

:startOfScript

set i=
for /l %%i in (1,1,255) do (
ping -n 1 %ipAddress%.%%i | find "TTL"
if errorlevel 0 (
deploy_this.bat %ipAddress%.%%i
)
)

このスクリプトは、指定されたxxxx/24のすべてのIPアドレスにpingを実行します。そのアドレスのpingが成功した場合にのみ、deploy_this.bat%ipAddress%。%%iを実行することになっています。ただし、何が起こっているのかというと、スクリプトはその特定の/ 24のすべてのアドレスにpingを実行し、起動しているかどうかに関係なく、deploy_this.bat%ipAddress%。%%iを実行します。

4

2 に答える 2

0

if errorlevel 0負のリターン コードを取得しない限り、常に true です (エラー レベルが 0以上であることをチェックするため)。あなたはおそらくしたいです

if not errorlevel 1
于 2012-04-25T13:54:31.987 に答える
0

コードの場合、次のようになります。

@echo off

for /L %%i in (1,1,255) do call :findit %%i
pause
goto :eof

:findit
    PING -n 1 192.168.0.%1 | FIND "TTL" > nul
    IF %errorlevel% == 0 (
        echo up
    ) ELSE (
        echo down
    )
goto :eof

コードを抽出してトリガーに適切に配置した後errorlevel、コードが のコードブロックにあったため、 が機能していなかったと思われます。formethoderrorlevel

メソッドには、ping出力が にリダイレクトされる単純なものがありますfind
検索で検索対象の文字列が見つからない場合は、ゼロ以外の値が返され、ステートメントerrorlevelがトリガーされます。if

バッチ ファイルの場合、ステートメントのif後にelsemust が続く形式は次のとおりです。

if <condition> (
) else (
)

または動作しません。

于 2012-04-25T14:07:53.110 に答える