Fazendo aritmética e passando para o próximo comando

2

Eu sei como fazer isso em / bin / sh, mas estou com dificuldades no Windows.

Eu sei que você pode fazer aritmética em inteiros assinados de 32 bits com

SET /a 2+2
4

Mas como eu passo isso para o próximo comando? Por exemplo, o processo que quero executar é o seguinte.

As edições do Consumidor do Windows não têm nenhuma função de sono automatizada nativa (creio?) - a melhor maneira de realizar um sono é usar PING em associação com a opção -n para obter tantos segundos, menos um, de dormir. O seguinte comando é efetivo para um descanso silencioso:

PING localhost -n 3 > NUL

Mas eu quero colocar isso em um comando sleep. Eu gostaria de tê-lo elegante para que você digite o número real de segundos que você deseja dormir após o comando, agora eu posso fazer

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

O que funciona, mas sempre é 1 segundo a menos que sua entrada, então se você quisesse dormir por um segundo, teria que usar o comando SLEEP 2 . Isso não é exatamente ideal.

Existe alguma maneira de eu passar a aritmética de $1+1 e passá-lo para o próximo comando no Windows? Eu suponho que há alguma maneira de usar o STDOUT ...

    
por Matthieu Cartier 23.12.2010 / 17:21

2 respostas

4

Experimente:

DOSKEY SLEEP==set /a t=$1+1 $G NULL $T PING 127.0.0.1 -n %t% $G NULL

O $T é um separador de comando equivalente a & .

Observe que o > NUL redireciona a saída de DOSKEY em vez da macro. Você pode ver que não está incluído, se você fizer DOSKEY /MACROS . Para fazer o redirecionamento que você deseja, acrescente $G NUL ao final da linha como mostrado acima.

Algo parecido com isso também funcionará:

DOSKEY SLEEP=for /f %t in ('set /a $1+1') do @PING 127.0.0.1 -n %t $G NUL

Experimente os dois e veja qual deles funciona melhor para você.

    
por 23.12.2010 / 21:53
1
  1. Tanto quanto sei, o cmd.exe não oferece uma função prontamente disponível para a avaliação da função em execução.

  2. Se você quiser apenas esperar por mais 1 segundo, basta inserir outro ping -n 2 127.0.0.1 nele.

  3. Você pode considerar a instalação do comando sleep a partir do ferramentas de administração do servidor windows .

  4. Que tal uma instalação do cygwin / powershell?

EDIT: corrigir minha estupidez de parâmetros de ping

    
por 23.12.2010 / 17:36