2015-08-25 68 views
0

,我會說,我很新的腳本開始...時間戳在批處理文件不正確更新

我試圖創建一個定期ping主機的批處理文件。目前,我只是在我的本地PC上進行測試。這是我迄今爲止所得到的結果:

@echo off 

set SERVERNAME=127.0.0.1 
set limit=3 

ECHO %date%, %time% Starting ping test to localhost>>c:\users\%username%\desktop\Pingtest.txt 

for /l %%X in (1,1,%limit%) do (

ping %servername% -n 3 | FIND "Reply" >>c:\users\%username%\desktop\Pingtest.txt 

echo %time% >>c:\users\%username%\desktop\Pingtest.txt 

Timeout /t 5 

) 

Exit 

但是,時間戳總是保持不變。它應該顯示時間爲~5秒之後(或設置超時值的時間),但保持與第一次時間戳相同。這裏有一個輸出的例子:

25/08/2015, 2:09:18.34 Starting ping test to localhost 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
2:09:18.34 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
2:09:18.34 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 
2:09:18.34 

有沒有什麼辦法讓它更新適當的時間?

作爲一個附註,「for/l %% X in ...」我無法弄清楚我應該實際放置什麼來代替%% X。從谷歌搜索等,我看到人們使用不同的,但似乎無法弄清楚它指的是什麼。如果有人可以讓我知道這一點,它將不勝感激。

感謝

回答

2

在一個點或另一個,從字面上每個人誰在批處理腳本就會落入陷阱delayed expansion

基本上,當第一次運行批處理腳本時,%variable%格式的變量會被替換爲其實際值。當代碼在代碼塊內(即在()之間)時,變量可能需要更新,但不能,因爲變量的存在已被其值替換。爲了解決這個問題,你可以在腳本的頂部放置setlocal enabledelayedexpansion,然後使用!variable!格式 - 這告訴腳本它們需要保持可改變。

@echo off 
setlocal enabledelayedexpansion 

set SERVERNAME=127.0.0.1 
set limit=3 

for /l %%X in (1,1,%limit%) do (
    ping %servername% -n 3 | FIND "Reply" >>c:\users\%username%\desktop\Pingtest.txt 
    echo !time! >>c:\users\%username%\desktop\Pingtest.txt 
    Timeout /t 5 
) 

對你而言,%%X只是在for循環中選擇使用的變量。它只能是一個字母長,並且基本上是批處理變量區分大小寫的唯一時間。在你的情況下,它可以是任何東西(%%X都很好),因爲你不直接使用它,而只是用它來運行代碼三次。

+0

太棒了,完美的工作。非常感謝。並感謝您解釋%% X。非常感激!我嘗試了一次投票,但是我的聲望還不夠高。 – jakeythehobo

+0

@jakeythehobo - 樂於助人。如果您覺得我的答案解決了您的問題,請點擊我答案旁邊的複選標記。 – SomethingDark

+0

對不起,我是新來的網站,所以不知道它是如何工作的。它絕對解決了它,所以再次感謝。 – jakeythehobo