2015-11-25 16 views
0
@echo off 
    setlocal enabledelayedexpansion 
    set OUTPUT_FILE=result.csv 

    >nul copy nul %OUTPUT_FILE% 
    echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE% 
    for /f "tokens=1 delims= " %%i in (hostnames.txt) do (
     set SERVER_ADDRESS_I=UNRESOLVED 
     set SERVER_ADDRESS_L=UNRESOLVED 
     for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
     if %%x==Pinging set SERVER_ADDRESS_L=%%y 
     if %%x==Pinging set SERVER_ADDRESS_I=%%z 
      if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN) 
     ) 
     echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE! 
     echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! 
>>%OUTPUT_FILE% 
    ) 

因此,我使用此腳本從主機名列表中ping每個主機名並使用屬性創建列表。問題是列表格式從每個由換行符分隔的主機名更改爲由空格分隔的每個主機名。現在此腳本僅從列表中獲取第一個主機名。如何更改腳本以使其佔用所有主機名?(我搞砸了一下與令牌和delims但不能使它工作)批處理腳本只需要位於循環中的.txt中的列表的第一個條目

回答

1

讀取文件內容到一個變量,並使用純for枚舉空格分隔的標記:

set /p hostnames=<hostnames.txt 
for %%i in (%hostnames%) do (
    ........ 
) 
相關問題