Это может помочь понять проблему с другой точки зрения. Допустим, вы - программист, которому поручено добавить планировщик задач в 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).
Удачи.