Windows похожа на команду * nix "at"

404
Rafael Almeida

* 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 "в". Но я хотел убедиться, что я не изобретал колесо первым.

2
На самом деле, нет. Если вы хотите простоты, вы застряли в `at`. Если вам нужна сложность, вы застряли в «schedtasks». Это печально, но это так. Там может быть сторонний инструмент, чтобы сделать это проще, или вы можете просто написать пакетный скрипт, чтобы сделать это. nhinkle 13 лет назад 0
Полагаю, мне следовало бы прояснить это раньше: я не надеюсь найти такой инструмент в самой Windows, так что я действительно ищу сторонний инструмент. Rafael Almeida 13 лет назад 0
Я, что после прочтения вашего обновления вы, вероятно, придете к тому же выводу, что и я, и просто напишите свой собственный простой планировщик, довольно просто написать программу на предпочитаемом вами языке, которая работает в фоновом режиме и периодически проверяет, является ли она X o Часы еще и если да, чтобы запустить задачу Y. Richard Lucas 13 лет назад 0

5 ответов на вопрос

3
Rafael Almeida

Вот как мне удалось решить проблему. Я создал файл .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
Dave

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

Просто скачал это, и хотя он не переопределяет команды Windows (то есть, нет "в" Unix), все равно это БОЛЬШАЯ вещь, которую нужно установить. Спасибо! Rafael Almeida 13 лет назад 1
1
Col

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

Параметр / Interactive отключен в Windows 7 из-за обновления безопасности (или, скорее, понижения версии из-за проблем безопасности). tovare 13 лет назад 0
1
Richard Lucas

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

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

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

Пожалуйста, смотрите обновление выше, я прояснил некоторые вещи. Rafael Almeida 13 лет назад 0
1
kokbira

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

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

Мне кажется, это немного "уродливый" обходной путь, но он должен работать, когда ничего не помогает =) Rafael Almeida 13 лет назад 1