Es könnte hilfreich sein, das Problem aus einer anderen Perspektive zu verstehen. Nehmen wir an, Sie sind der Programmierer, der mit dem Hinzufügen eines Task-Schedulers zu Windows beauftragt wurde. Wie würdest du es machen? Sie haben mehrere Probleme, mit denen Sie sich auseinandersetzen müssen: Wenn die Aufgabe von einem anderen Benutzer als dem angemeldeten Benutzer ausgeführt wird, sollten Sie den angemeldeten Benutzer mit Fehler-Popups belästigen? Was ist, wenn zum Zeitpunkt der Aufgabe kein Benutzer angemeldet ist? Was ist der Unterschied zwischen einem GUI-Programm und einem Konsolenprogramm? GUIs haben nicht stdin, stdout und stderr; Das Konzept ist in ihnen bedeutungslos. Was ist mit Programmen, die intern oder extern für COMMAND.COM/CMD.EXE sind? Oder andere Scripting Engines? Wie sieht es mit Pfaden mit Leerzeichen im Befehlsnamen aus? Oder in den Parametern (Optionen / Argumente)? (Wie Sie jetzt zu beschäftigen versuchen ..)
Ich bin mir in diesem Fall nicht absolut sicher über die Interna oder die vollständigen technischen Details, aber die Antworten scheinen zu sein. Die Aufgaben werden in einer isolierten, nicht interaktiven Sitzung ausgeführt, die nicht mit dem aktuell angemeldeten Benutzer interagieren kann (falls vorhanden) ); Es wird erwartet, dass keine Konsolenausgabe vorhanden ist. Da es nicht interaktiv ist, kann es jeden angemeldeten Benutzer nicht unterbrechen, um die Ausgabe anzuzeigen. Wenn es Ausgabe gibt, ist stdin der Bitbucket / NULL-Befehl, stdout und stderr werden angemeldet die Systemprotokollierungseinrichtung); Leerzeichen werden durch Umgehen des Problems gehandhabt: Der Befehlsname wird exakt übernommen, und die Parameter werden an den Befehl übergeben. Sie werden in einem anderen Eingabefeld in den Task-Eigenschaften angegeben.
Was bedeutet, dass Ihre Aufgabe so ausgeführt werden muss, als wäre sie ein Dämon (in der Un * x-Welt). Alles ist statisch und präzise. Der Befehlsname ist der tatsächliche Befehlsname ohne Parameter. Dies beinhaltet häufig das Ausführen von Befehls- / Skriptinterpreter wie CMD.EXE! Die Parameter, sofern vorhanden, sind an anderer Stelle angegeben und müssen bekannt sein, wenn Sie die Task einrichten (dh Sie können die Parameter nicht "on-the-fly" ändern). Und so weiter.
Wenn Sie also Parameter einschließen möchten, müssen Sie die Parameter mit dem Parameterabschnitt angeben. Der Taskplaner tut dies nichtVersuchen Sie, den Befehlsnamen zu parsen, um ihn in "command" und "args" aufzuteilen, wie dies Befehlszeilenprogramme tun. Es behandelt es einfach als einen großen, vollständigen Befehlsnamen. Wenn Sie variable Parameter wünschen, wie z. B.% 1 ..% n in BATCH-Dateien, können Sie dies nicht über den Taskplaner selbst tun. Du musst einen anderen Weg finden. (Beachten Sie, dass Sie auch keine Umgebungsvariablen verwenden können, da die an das Programm übergebene Umgebung von der Umgebung abhängt, mit der die Task gestartet wird, NICHT von der "aktuellen" Umgebung.) Sie können eine temporäre Datei verwenden, um die Parameter zu speichern, jedoch von Ihnen Sie müssen einen statischen Dateinamen in den Task-Eigenschaften angeben. Was passiert, wenn Sie sich in einem Netzwerk mit 5000 Benutzern befinden und vier von ihnen versuchen, dieselbe Task gleichzeitig auszuführen? Sie werden sich alle gegenseitig beschimpfen und versuchen, gleichzeitig in dieselbe temporäre Datei zu schreiben. wahrscheinlich auch nicht das, was du wolltest. (Es gibt auch Lösungen für dieses Problem, aber das geht zu weit über den Rahmen dieser Frage und Antwort hinaus.)
Endgültige Antwort: Im einfachen Fall - der Pfad, den Sie als Parameter übergeben möchten, ist statisch und ändert sich nicht - müssen Sie entweder die Parameter in der entsprechenden Task-Eigenschaft (Argumente) angeben, anstatt im Feld Programm / Skript oder verwenden Sie eine Batchdatei. In einem komplexeren Fall müssen Sie die richtige Frage stellen oder nachforschen, wie Dämonen funktionieren und wie Sperren / Semaphore und dergleichen für die Kommunikation zwischen Prozessen (IPC) verwendet werden.
Viel Glück.