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

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

Eu sei como fazer isso em/bin/sh, mas estou tendo algumas 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 passo isso para o próximo comando? Por exemplo, o processo que desejo realizar é o seguinte.

As edições de consumo do Windows não possuem função nativa de suspensão automatizada (eu acredito?) - a melhor maneira de realizar uma suspensão é usá-la PINGem associação com o -nswitch para obter tantos segundos, menos um, de suspensão. O seguinte comando é eficaz para um sono silencioso:

PING localhost -n 3 > NUL

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

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

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

Existe alguma maneira de passar a aritmética $1+1e passá-la para o próximo comando no Windows? Presumo que haja alguma maneira de usar STDOUT ...

Responder1

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 comandos equivalente a &.

Observe que > NULredireciona a saída DOSKEYem vez da macro. Você pode ver que ele não está incluído se você fizer isso DOSKEY /MACROS. Para fazer o redirecionamento desejado, anexe $G NULao final da linha conforme mostrado acima.

Algo assim 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 funciona melhor para você.

Responder2

  1. Até onde eu sei, o cmd.exe não oferece funções prontamente disponíveis para avaliação de funções em execução.

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

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

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

EDIT: corrija a estupidez do meu parâmetro de ping

informação relacionada