2013-11-01 32 views
1

下面的腳本工作,但它會減慢很多當擊中離線主機。試圖通過使用ping來加快我的批處理文件處理速度。現在跳出循環

@echo off 
rem Setup the output file. This just wipes the pre-existing file from last set of data mining 
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b) 
echo %mydate%_%mytime% > output\datamine.txt 
**setlocal enabledelayedexpansion 
for /f %%a in (hosts.txt) do (
psexec \\\%%a findstr /I ":" "C:\ProgramData\Firewall\event.log" >> output\datamine.txt) 
endlocal** 

我改寫了平聲明,打算跳過不回答主機。下面是它的肉:

for /f %%a in (hosts.txt) do (<br> 
ping -n 1 -w 100 %%a | for /f "skip=1 tokens=3 delims= " %%b in ('findstr bytes') do (set COMPNAME=%%b) 
if errorlevel 1 goto FAIL 
psexec \\%%a findstr /I ":" "C:\ProgramData\Firewall\event.log" >> output\datamine.txt) 
goto END 
:FAIL 
echo host not answering 
:END 
endlocal 

的問題是那麼明顯,我退出時主機不迴應ping do循環。我需要腳本來查看錯誤級別1,然後跳到下一個主機。不知道我應該在哪裏結束循環。另外,我對「goto」的選擇不太確定。 有什麼建議嗎?

回答

1

您退出for循環。而不是做goto添加一個else並在其後面移動括號。

這是我寫的一個功能,以及如何實現它。

for /f %%a in (hosts.txt) do (
    call :IsPingable %%a && (
    psexec \\%%a findstr /I ":" "C:\ProgramData\Firewall\event.log" >> output\datamine.txt 
    ) || (
    echo host %%a not answering 
    ) 
) 
exit /b 

:IsPingable comp 
ping -n 1 -w 3000 -4 -l 8 "%~1" | Find "TTL=">nul 
exit /b 
+0

就是這樣。好多了。我不確定爲什麼我沒有想到這個電話。謝謝! – AndyG

0

示例代碼:

for /f %%a in (hosts.txt) do ping -n 1 "%%a">nul && call :success "%%a"|| call :fail "%%a" 
goto:eof 

:success 
echo success: %~1 
goto:eof 

:fail 
echo fail: %~1 
goto:eof