Это может помочь понять проблему с другой точки зрения. Допустим, вы программист, которому поручено добавить планировщик задач в Windows. Как бы вы это сделали? У вас есть несколько проблем, с которыми приходится сталкиваться: если задание выполняется от имени другого пользователя, а не вошедшего в систему пользователя, следует ли раздражать вошедшего в систему пользователя всплывающими сообщениями об ошибках? Что делать, если во время выполнения задачи не было зарегистрированного пользователя? Как насчет разницы между программой с графическим интерфейсом и консольной программой? Графические интерфейсы не имеют stdin, stdout и stderr; понятие бессмысленно в них. Как насчет программ, внутренних или внешних для COMMAND.COM/CMD.EXE? Или другие скриптовые движки? Как насчет путей с пробелами в имени команды? Или в параметрах (опциях / аргументах)? (Как вы пытаетесь справиться сейчас ..)
Хотя я не уверен на 100% насчет внутренних деталей или полных технических деталей в этом случае, ответы вроде бы ... Задачи выполняются в изолированном неинтерактивном сеансе, который не может взаимодействовать с вошедшим в данный момент пользователем (если есть); Он запускается, ожидая, что не будет никакого вывода на консоль, так как он неинтерактивный, он не может просто прервать работу любого вошедшего в систему пользователя, чтобы показать вывод (во всяком случае, если вывод есть, stdin - это bitbucket/NULL, stdout и stderr будут зарегистрированы в средство регистрации системы); Пробелы обрабатываются путем обхода проблемы: имя команды принимается ТОЧНО как есть, а параметры, передаваемые команде, указываются в другом поле ввода в свойствах Задачи.
Все это означает, что ваша задача должна выполняться, как если бы она была похожа на демона (в мире Un * x). Все статично и точно. Имя команды - это фактическое имя команды без каких-либо параметров. Это часто включает запуск интерпретаторов команд / сценариев, таких как CMD.EXE! Параметры, если таковые имеются, указываются в другом месте и должны быть известны при настройке задачи (то есть вы не можете изменять параметры «на лету»). И так далее.
Таким образом, если вы хотите включить параметры, вы должны использовать раздел параметров, чтобы указать параметры. Планировщик задач не пытается разобрать имя команды, чтобы разделить его на "команду" и "аргументы", как это делают программы командной строки. Он просто обрабатывает это как одно большое полное имя команды. Аналогично, если вам нужны переменные параметры, такие как использование% 1 ..% n в файлах BATCH, вы не можете сделать это из самого планировщика задач; Тебе придется найти другой путь. (Обратите внимание, что вы также не можете использовать переменные среды, поскольку среда, передаваемая в программу, зависит от среды, в которой запускается задача, а не от "текущей" среды.) Вы можете использовать временный файл для сохранения параметров, но, поскольку вы должны указать статическое имя файла в свойствах Задачи, что произойдет, когда вы находитесь в сети с 5000 пользователями, и четверо из них пытаются запустить одну и ту же задачу одновременно? Все они будут сжимать друг друга, пытаясь записать в один и тот же временный файл одновременно, вероятно, не то, что вы хотели. (Есть решения этой проблемы, но это выходит за рамки этого вопроса и ответа ..)
Итак, окончательный ответ: в простом случае - путь, который вы хотите передать в качестве параметра, является статическим и не изменяется - вы должны либо указать параметры в соответствующем свойстве Task (Аргументы), а не в поле Program/Script или используйте командный файл. В более сложном случае - вам нужно задать правильный вопрос или исследовать, как работают демоны и как использовать блокировку / семафоры и тому подобное для межпроцессного взаимодействия (IPC).
Удачи.