0

こんにちは、メモ帳ファイルのサーバーのリストから RDP/ICA リスナーを持つサーバーを除外するバッチ ファイルを作成しようとしています。以下の構文でこのスクリプトを作成しましたが、何らかの理由で機能しません。予想通り、状況を解決するのを手伝ってくれる人はいますか?

computer.txt ファイルにサーバーのリストがあり、ダウンしているサーバーを見つけようとしています。errorlevel が 0 の場合、文字列 down が見つかったことを意味し、サーバー名を listenerdown.txt に出力する必要があります。しかし、何らかの理由で、バッチ ファイルを実行すると、computer.txt 内のすべてのサーバーが listenerdown.txt ファイルに書き込まれます。

以下はバッチファイルです

for /f %%i in (computer.txt) do(
qwinsta /server:%%i | findstr/i down >nul 2>&1
if %errorlevel% neq 1
echo %%i >>Listenerdown.txt
)
4

2 に答える 2

0

echoステートメントと同じ行に移動するifか、括弧を使用してスコープを確立します。変数は拡張の遅延なしにループに設定されないため、%ErrorLevel%は常に0になります。

setlocal EnableDelayedExpansion
for /f %%i in (computer.txt) do(
    qwinsta /server:%%i | findstr /i down >nul 2>&1
    if !errorlevel! neq 1 echo %%i>>Listenerdown.txt
)
endlocal

また

setlocal EnableDelayedExpansion
for /f %%i in (computer.txt) do(
    qwinsta /server:%%i | findstr /i down >nul 2>&1
    if !errorlevel! neq 1 (
        echo %%i>>Listenerdown.txt
    )
)
endlocal

Cmd.exeは、バッチファイルを1行ずつ解析します。コマンドのスコープが次の行に続くことを通知しない限り、コマンドは終了したと見なされます。

于 2013-01-21T21:23:54.627 に答える
0

の代わりにsetlocal EnableDelayedExpansion、およびを使用する必要があります。!errorlevel!%errorlevel%

@echo off
setlocal EnableDelayedExpansion

for /f %%i in (computer.txt) do (
qwinsta /server:%%i | findstr/i down >nul 2>&1
if !errorlevel! neq 1 echo %%i >>Listenerdown.txt
)

そうしないと、エラーレベルの値がループに入る前に 1 回だけ展開され、正しい値が得られなくなります。echoがと同じ行にあることも確認する必要がありifます。

于 2013-01-21T21:26:45.480 に答える