Não é possível executar o arquivo em lotes no Server 2012
Aqui está uma maneira muito mais simples de fazer o que você quer (em um comando de uma linha):
ping 10.18.89.154 | findstr "Packets" > c:\pinglog.txt
O comando acima funcionará como está na linha de comando ou em um arquivo de lote.
O arquivo em lote a seguir usa o google.com como o destino do ping, pois não consigo fazer ping em algo na sua rede com um endereço IP privado.
test.cmd:
ping www.google.com | findstr "Packets" > pinglog.txt
Exemplo de saída :
C:\test>test
C:\test>ping www.google.com | findstr "Packets" 1>pinglog.txt
C:\test>type pinglog.txt
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
C:\test>
Para usar seus comandos originais, no comando for /f
, é necessário substituir %
por %%
:
FOR /F "skip=8 delims=" %%i in (C:\pinglog.txt) do @echo %%i >C:\TEMP.TXT
Existe uma maneira de isolar os valores nessa linha, ou você pode produzir apenas a linha inteira?
The reason I wanted to bring back the the "received" value only, is if that file is "0" I could trigger an alert based on that.
O arquivo de lote a seguir encontrará o valor de "Recebido" e a saída "Ping falhou" se esse valor for 0
, caso contrário, não produzirá nada.
Como bônus, ele não usa arquivos.
Você pode substituir echo "Ping failed"
pelo comando de alerta quando decidir o que deveria ser.
test.cmd:
@echo off
for /f "usebackq skip=8 tokens=7" %%i in ('ping 10.18.89.154') do (
set _result=%%i
goto :done
)
:done
if "%_result:~0,1%"=="0" echo "Ping failed"
Outras leituras
%%parameter
A replaceable parameter: in a batch file use%%G
(on the command line%G
)