2

* nix имеет команду "at", которая может быть передана для запуска программы в определенное время. Как это:

echo "SOME_COMMAND" | at 00:00

В Windows также есть команда "at", которая создает запланированную однократную задачу, которая запускается в фоновом режиме пользователем SYSTEM. "schedtasks" является более полным, но также неудобен в использовании (особенно потому, что для каждого задания требуется уникальное имя, идея создания пакета для создания стиля * nix задачи с однократным выполнением, чтобы имитировать "at" * nix становится непрактичным).

Итак, есть ли утилита для Windows, которая делает то, что делает * nix 'at', простым, без проблем способом?

ОБНОВЛЕНИЕ: я буду более точным теперь =). Я пытаюсь выключить монитор в определенное время, и я использую утилиту командной строки под названием nircmd, чтобы я мог просто набрать "nircmd monitor off" для выполнения этой работы. Если бы я использовал Linux на этом компьютере, все, что мне нужно было сделать, это

echo "nircmd monitor off" | at XX:YY

или создать "макрос". Но в Windows у меня есть только запланированные задачи, что является довольно бюрократическим способом создания задачи с однократным запуском, так как "at" на самом деле не работает (см. Мой аналогичный вопрос Windows Task Scheduler и возможные проблемы с разрешениями) и "schedtasks" требует целого уникального имени, упомянутого выше.

Будучи программистом, должно быть достаточно просто создать такую программу, которая имитирует Unix "в". Но я хотел убедиться, что я не изобретал колесо первым.

5 ответов5

3

Вот как мне удалось решить проблему. Я создал файл .bat с именем killscreenat.bat и поместил его в /Windows /system32 (но, разумеется, вы можете поместить его в любое место - или в любое место в вашем PATH). Сценарий прост:

schtasks.exe /create /SC ONCE /TN poweroffmonitor /TR "nircmd monitor off" /ST %1 /F

И использование просто:

killscreenat HH:MM

Ключ был (сильно не / недокументированный) / F вариант. Хотя в документации Technet (или в любом другом месте, которое я читал) об этом не говорится, он заставляет запланированные задачи перезаписать созданную задачу, если она уже существует.

Это не глобальное решение - это означает, что вы не можете просто "передать" какую-либо команду, но если ваша "задача" такая же частая, как моя, процесс достаточно прост.

Спасибо всем за ответы, они действительно помогли найти окончательное решение!

2

Вы пробовали CygWin оболочку Bash в Windows?

1

Ну, я использую этот тупой метод:

:label1
если "% time%" GTR "15:00:00,00" сделать (
поместите ваши команды здесь
Перейти к label2
)
Перейти к label1
:label2

1

В команде at в окнах есть различные флаги, которые позволяют вам задавать повторяющиеся и интерактивные задачи, просто сделайте в --help полный список. Для меня это выглядит так, как будто вы используете комбинацию /every: и /interactive, но я не уверен, чего именно вы пытаетесь достичь.

1

Запланированные задачи на настольных компьютерах Windows (не серверные выпуски, они кажутся нормальными) по моему опыту совершенно ненадежны и все еще не работают в Windows 7. Вы обнаружите, что вы создаете задачи, которые работают какое-то время, а потом вдруг не по какой-либо причине, которую вы можете определить.

Вероятно, вы столкнетесь с какими-то проблемами с разрешениями, если попытаетесь использовать его в Windows Vista/Windows 7, так как вам нужно запустить командную строку с повышенными правами, чтобы даже получить доступ к команде.

Чего вы пытаетесь достичь, возможно, вы могли бы запустить свой собственный планировщик или использовать вместо этого другой сторонний инструмент?

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