Não é possível executar o arquivo em lotes no Server 2012

1

Este site balança! Eu estou tentando executar um arquivo .bat simples no Server 2012 que ping de outro servidor, filtrar todas as linhas, exceto um e, em seguida, gravar em um arquivo para uso posterior (eu quero esse arquivo enviado em algum lugar, mas isso é um projeto para outra discussão!).

Reuni alguns comandos da pesquisa neste fórum e tenho os comandos necessários para que isso aconteça. Quando eu executo esses comandos um de cada vez a partir do ms-dos, ele funciona. No entanto, quando eles colocam todos em um arquivo de morcego, algo fica bagunçado. Eu não tenho muita experiência com o Server os, por isso pode ser algo simples que estou faltando. Qualquer ajuda seria apreciada.

Aqui estão minhas instruções

ping 10.18.89.154 >C:\pinglog.txt
FOR /F "skip=8 delims=" %i in (C:\pinglog.txt) do @echo %i >C:\TEMP.TXT
SET /P SHOW= < C:\TEMP.TXT
ECHO %SHOW% >C:\pinglog.txt

E aqui está o resultado quando executado manualmente:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Mas quando executo esses comandos em um arquivo de lote, a janela cmd trava na primeira linha, mostra o texto abaixo na janela cmd e produz um arquivo em branco ...

C:\Users\administrator.WSI\Documents>ping 10.18.89.154 1>C:\pinglog.txt

Quaisquer pensamentos?

    
por Clay Whitenack 19.06.2015 / 12:22

2 respostas

1

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)

    
por 19.06.2015 / 12:31
0

Eu tive o mesmo problema descrito na pergunta original. Não encontrei respostas. Eu finalmente resolvi o problema criando um atalho para o arquivo de lote. Ao iniciar o arquivo em lotes de um atalho, o arquivo é executado conforme o esperado. Caso contrário, trava na primeira linha.

    
por 12.06.2017 / 16:22