2

Я знаю, как сделать это в /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 ...

2 ответа2

4

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: исправить мою глупость параметра ping

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .