2014-10-07 63 views
0

我試圖創建一個存儲到tmp文件命令的輸出簡單的批處理腳本命令的輸出,存儲tmp文件給一個變量的內容,並輸出變量:呼應從可變

@setlocal enableextensions enabledelayedexpansion 
@echo off 

ping -n 1 10.1.0.2 > tmp 

SET @var= < tmp 
ECHO %@var% 

del tmp 

我希望上面的工作,但它outpus:

C:\Documents and Settings\Administrator\Desktop>pinger.bat 
ECHO is off. 

(注:以@echo off只是輸出ECHO is on,包括呼應所有的代碼行)

+0

設置var真的有必要嗎?你可以'''輸入tmp'''而不是設置和回顯var。 – rostok 2014-10-07 13:38:50

+0

@rostok是的我需要它在一個var中設置,輸出文件的內容不是我的程序的目標。那麼我將需要對輸出 – Juicy 2014-10-07 13:40:35

+0

進行操作,對整個文件內容一次或每行進行一次操作? – rostok 2014-10-07 13:47:48

回答

1

@rostok指向的question(我的回答爲here)顯示不使用收到的數據包來確定主機是否在線的原因。在同一子網上,通過ipv4,使用脫機主機,您將收到「無法訪問」的錯誤,但數據包已收到。

對於ipv4中的簡單測試,鏈接的答案可以處理您的問題。對於ipv4或ipv6(顯示不同的行爲)的更強大的測試,this可能會有所幫助。

反正代碼直接從ping命令獲取所需的數據,

set "received=" 
for /f "skip=6 tokens=5 delims==, " %%a in ('ping -n 1 10.1.0.2') do (
    if not defined received set "received=%%a" 
) 

或從文件

set "received=" 
for /f "usebackq skip=6 tokens=5 delims==, " %%a in ("tmpFile") do (
    if not defined received set "received=%%a" 
) 

skip子句指示前六行應該被忽略,並且tokensdelims選擇行內所需元素

Packets: Send = 1, Received = 1, 
     ^ ^^^ ^^  ^^^^Delimiter position 
1  2  3 4   5 Token number 

但如上所述,這不是一個可靠的方法來解決問題