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