2013-01-21 37 views
0

您好我想創建一個批處理文件來篩選出從記事本文件中的服務器列表中有RDP/ICA偵聽器的服務器,我用下面的語法創建了這個腳本,但由於某些原因,它不會按預期工作,有人能幫我解決這個問題嗎?Findstr批處理文件找到偵聽器下來的服務器

我有一個在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 
) 

回答

0

移動的echo到與if語句相同的行,或者使用括號來建立範圍,並且%ErrorLevel%將始終爲0,因爲th e變量不會在沒有延遲擴展的循環中設置。

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解析一行批處理文件行,除非你告訴它該命令的範圍將繼續到下一行就認爲該命令完成。

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 
) 

否則ERRORLEVEL的價值將只有一次擴大,進入循環前,並不會有正確的值。您還必須確保echoif位於同一行。