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 PING
em associação com o -n
switch 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+1
e 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 > NUL
redireciona a saída DOSKEY
em 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 NUL
ao 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
Até onde eu sei, o cmd.exe não oferece funções prontamente disponíveis para avaliação de funções em execução.
Se você quiser esperar mais 1 segundo, basta inserir outro ping -n 2 127.0.0.1 nele.
Você pode considerar a instalação do comando sleep noferramentas de administração de servidor windows.
Que tal uma instalação do cygwin/powershell?
EDIT: corrija a estupidez do meu parâmetro de ping