2016-08-01 12 views
1

Ich habe den folgenden Code in VBScript:schtasks Befehl funktioniert, wenn sie von CMD laufen, aber nicht von VBScript

Set oShell = CreateObject ("WScript.Shell") 
Dim strArgs 

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33" 
oShell.Run strArgs, 0, false 

Dies schafft eine Aufgabe in dem Taskplaner in Windows.

Beim Ausführen des VBScript die Aufgabe nicht erstellt wird, aber wenn ich den Befehl in CMD laufen funktioniert es:

SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33 

Ich verstehe nicht, was passiert ist.

+0

Sie können SchTasks.exe nur mit Administratorberechtigungen ausführen, wie von einer Eingabeaufforderung mit erhöhten Rechten. Sie müssen den UAC-Zustimmungsdialog durchlaufen. Der einfachste Grund für Ihr .vbs-Skript funktioniert nicht, weil es nicht auf Hoch gesetzt ist. –

+0

@HansPassant Nein, das ist nicht das Problem hier. 'schtasks' funktioniert problemlos von einem Benutzerkonto für Aufgaben auf Benutzerebene. –

Antwort

2

VBScript-Strings beginnen und enden mit einem doppelten Anführungszeichen. Alle verschachtelten doppelten Anführungszeichen innerhalb der Zeichenfolge MÜSSEN durch doppelte verdoppeln entkommen.

Sie definieren strArgs wie folgt aus:

strArgs = "SchTasks /Create ... /TR "'C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33" 
'  ^      ^^ 
'   |       |`- comment begins here 
' string begins here   string ends here 

Grundsätzlich führen Sie den Befehl

SchTasks /Create /SC MONTHLY /D 8 /TN "RespaldoBD" /TR 

, die, natürlich, schlägt fehl.

Normalerweise erhalten Sie einen Syntaxfehler, aber die einfachen Anführungszeichen, die Sie um den verschachtelten Befehl verwenden, machen den Rest der Zeile zu einem Kommentar, so dass die Anweisung syntaktisch korrekt, aber semantisch gebrochen ist.

Außerdem sollten die einfachen Anführungszeichen nicht an erster Stelle stehen. Sie definieren die gesamte Python-Befehlszeile als das Programm, wenn das nur die ausführbare Python-Datei sein soll. Der Pfad zum Skript soll ein Argument sein. diese

Wechsel:

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33" 

in diese:

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR ""C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py"" /ST 16:33" 

und sowohl die VBScript und die geplante Aufgabe arbeiten.

+0

du bist großartig, vielen Dank –