Executando um comando em lote sem resultados na tela

1

Estou com um problema ao escrever um arquivo em lote. Eu me pergunto se alguém pode ter uma solução para mim. Este arquivo é muito longo, então estou tentando descobrir uma maneira de fazer menos escrita de código. Eu tenho muitas mensagens de eco que são exibidas por alguns segundos e depois desaparecem quando o arquivo passa para a próxima tela / código. Eu sei que posso escrever algo assim ...

@echo off
echo Message
ping localhost -n 3 >nul
cls

Escrever ping localhost -n 3 >nul sempre que eu quiser um atraso é demorado. Eu sei que eu poderia copiar e colar, mas isso não é ideal para a minha situação também. Eu tive a idéia de definir uma variável igual a ping localhost -n 3 >nul escrito como,

set delay3=ping localhost -n 3 >nul

isso me permitiria digitar %delay3% para economizar tempo. Eu achei isso funcionalmente funciona bem, mas tem um efeito colateral. Quando escrito dessa maneira,

@echo off
set delay3=ping localhost -n 3 >nul
echo Message
%delay3%
cls

meu arquivo de lote exibirá todos os dados de ping na tela, embora eu tenha escrito @echo off no início do meu script. Só para ficar claro, esses dados só aparecem na tela quando eu uso a versão %delay3% do código. Alguém sabe de uma maneira de fazer com que os dados do ping não apareçam na tela ao codificá-lo dessa maneira?

    
por Seth Rische 14.12.2017 / 18:43

1 resposta

1

Como faço para que os dados de ping não apareçam na tela quando codifico dessa maneira?

O problema está no seu comando set :

set delay3=ping localhost -n 3 >nul

O >nul (usado para descartar a saída) é aplicado ao comando set e não é armazenado na variável.

Por outro lado:

set "delay3=ping localhost -n 3 >nul"

Faz o que você quer.

Arquivo em lote corrigido:

@echo off
set "delay3=ping localhost -n 3 >nul"
echo Message
%delay3%
cls
rem do other stuff
endlocal

Exemplo de saída:

> test
Message

>

Leitura Adicional

por 14.12.2017 / 19:09