Seu erro de sintaxe é o resultado de seu redirecionamento sem escape dentro da cláusula FOR IN (). A seguir, você eliminará o erro de sintaxe:
for /f %%G in ('ping localhost -n 100 ^>nul') do (
Mas seu roteiro parece totalmente inútil. Redirecionar a cláusula IN () PING para null significa que não há nada para iterar, portanto, o código dentro do loop nunca será disparado. Mesmo se você remover o redirecionamento, será altamente impreciso.
É melhor obter% TIME% no início e no final do processo e usar análise e matemática relativamente simples para reduzir o tempo decorrido para 1/100 segundos. Isso pode processar tempos até ~ 24 horas.
@echo off
setlocal
set "t1=%time%"
rem someCommandThatYouWantToTime
set "t2=%time%"
:: Compute elapsed time as 1/100 seconds
for /f "tokens=1-4 delims=:.," %%a in ("%t1: =0%") do set /a "t1=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100"
for /f "tokens=1-4 delims=:.," %%a in ("%t2: =0%") do set /a "t2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, tDiff=t2-t1"
if %tDiff% lss 0 set /a tDiff+=24*60*60*100
echo Elapsed time = %tDiff% centiseconds
:: Convert centiseconds into hours, minutes, decimal seconds
set /a "f=tDiff%%100, s=(tDiff/100)%%60, m=(tDiff/100/60)%%60, h=tDiff/100/60/60"
if %f% lss 10 set "f=0%f%"
if %s% lss 10 set "s=0%s%"
if %m% lss 10 set "m=0%m%"
if %h% lss 10 set "h=0%h%"
echo Elapsed time = %h%:%m%:%s%.%f%