Выполнение арифметических действий и передача их следующей команде

Выполнение арифметических действий и передача их следующей команде

Я знаю, как это сделать в /bin/sh, но в Windows у меня возникли некоторые трудности.

Я знаю, что можно выполнять арифметические действия с 32-битными знаковыми целыми числами с помощью

SET /a 2+2
4

Но как мне передать это следующей команде? Например, процесс, который я хочу выполнить, выглядит следующим образом.

Потребительские версии Windows не имеют собственной функции автоматического сна (я полагаю?) — лучший способ выполнить сон — использовать его PINGвместе с -nпереключателем, чтобы получить столько секунд сна, минус одна. Следующая команда эффективна для тихого сна:

PING localhost -n 3 > NUL

Но я хочу сделать это псевдонимом в команде сна. Я хотел бы сделать это элегантно, чтобы вы вводили фактическое количество секунд, которое вы хотите спать после команды, прямо сейчас я могу сделать

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

Это работает, но это всегда на 1 секунду меньше, чем вы вводите, так что если вы хотите поспать одну секунду, вам придется использовать команду SLEEP 2. Это не совсем идеально.

Есть ли способ передать арифметику $1+1и передать ее следующей команде в Windows? Я предполагаю, что есть способ использовать STDOUT...

решение1

Попробуйте это:

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

$Tразделитель команд, эквивалентный &.

Обратите внимание, что > NULперенаправляет вывод, DOSKEYа не макрос. Вы можете видеть, что он не включается, если вы делаете DOSKEY /MACROS. Чтобы выполнить перенаправление, которое вам нужно, добавьте $G NULв конец строки, как показано выше.

Что-то вроде этого тоже подойдет:

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

Попробуйте оба варианта и посмотрите, какой из них подходит вам больше.

решение2

  1. Насколько мне известно, cmd.exe не предоставляет готовых функций для оценки функции во время ее выполнения.

  2. Если вы просто хотите подождать еще 1 секунду, просто вставьте в него еще одну команду ping -n 2 127.0.0.1.

  3. Вы можете рассмотреть возможность установки команды sleep изинструменты администрирования сервера Windows.

  4. Как насчет установки cygwin/powershell?

EDIT: исправьте мою глупость с параметром ping

Связанный контент