Robocopy-Batch lässt sich per VB-Script über Aufgabenplanung unsichtbar starten - aber nicht beenden
Hallo an alle,
ich habe eine Frage zu RoboCopy (System: Windows 7 Prof.); hier kurz die 'Vorgeschichte':
Ich verwende derzeit RoboCopy zum Monitoren und Synchronisieren eines Verzeichnisses. Geänderte Dateien werden so in ein verschlüsseltes Verzeichnis auf dem gleichen Rechner kopiert (die verschlüsselten Daten werden später durch andere Prozesse nach außen synchronisiert).
Zur Automatisierung wollte ich die RoboCopy-Synchronisation ursprünglich als Dienst einbinden. Dies scheiterte jedoch an meinem Wunsch, für jeden Tag ein getrenntes Logfile zu erzeugen. In einer Batchdatei kann hierfür die %date% - Umgebungsvariablen abgefragt werden. Als Start-Parameter beim Einrichten eines Dienstes kann ich dies jedoch nicht übergeben, da der Parameter hierfür (/LOG+:"c:\Logfiles\RoboCopy.%date:~-4%-%date:~-7,2%-%date:~-10,2%.log") in der Form nicht vom Dienst verarbeitbar ist; jedenfalls scheiterte der Dienststart damit jedesmal. Vielleicht muss der Syntax dann auch angepasst werden - ich hab's nicht hinbekommen... Leider kann auch in einer RoboCopy-Job-Datei nicht mit Variablen gearbeitet werden, sonst hätte ich mir den Pfad variabel aus der Job-Datei geholt.
Deshalb bin ich zum Aufgabenplaner gewechselt und starte den RoboCopy-Prozess nun hier beim Einloggen in den Benutzeraccount (mit etwas Wartezeit). Damit das ganze unsichtbar erfolgt, verwende ich hierfür VB-Script:
Set WshShell = WScript.CreateObject("WScript.Shell")
sDate = Year(Now) & "-" & Month(Now) & "-" & Day(Now)
sLogfile = "c:\Logfiles\RoboCopy." & sDate & ".log"
Return = WshShell.Run("C:\Windows\system32\robocopy.exe /JOB:""PfadZurJobdatei.rcj"" /LOG+:" & sLogFile, 0, True)
Sowohl der nicht sichtbare Aufruf des Prozesses und auch das Schreiben in eine Logdatei mit variablen Namensteil funktioniert damit prima.
Was jetzt noch stört: Das (manuelle) Beenden der Aufgabe im Aufgabenplaner bewirkt leider nicht, dass der RoboCopy-Process beendet wird. Die Aufgabe steht dann zwar als "Beendet", jedoch läuft RoboCopy noch und hält auch den Zugriff auf die Logdatei.
Gibt es eine Möglichkeit, die Umsetzung zu verbessern, so dass über den Aufgabenplaner auch ein sauberes Beenden des Prozesses erfolgt?
Vielen Dank,
Daniel
ich habe eine Frage zu RoboCopy (System: Windows 7 Prof.); hier kurz die 'Vorgeschichte':
Ich verwende derzeit RoboCopy zum Monitoren und Synchronisieren eines Verzeichnisses. Geänderte Dateien werden so in ein verschlüsseltes Verzeichnis auf dem gleichen Rechner kopiert (die verschlüsselten Daten werden später durch andere Prozesse nach außen synchronisiert).
Zur Automatisierung wollte ich die RoboCopy-Synchronisation ursprünglich als Dienst einbinden. Dies scheiterte jedoch an meinem Wunsch, für jeden Tag ein getrenntes Logfile zu erzeugen. In einer Batchdatei kann hierfür die %date% - Umgebungsvariablen abgefragt werden. Als Start-Parameter beim Einrichten eines Dienstes kann ich dies jedoch nicht übergeben, da der Parameter hierfür (/LOG+:"c:\Logfiles\RoboCopy.%date:~-4%-%date:~-7,2%-%date:~-10,2%.log") in der Form nicht vom Dienst verarbeitbar ist; jedenfalls scheiterte der Dienststart damit jedesmal. Vielleicht muss der Syntax dann auch angepasst werden - ich hab's nicht hinbekommen... Leider kann auch in einer RoboCopy-Job-Datei nicht mit Variablen gearbeitet werden, sonst hätte ich mir den Pfad variabel aus der Job-Datei geholt.
Deshalb bin ich zum Aufgabenplaner gewechselt und starte den RoboCopy-Prozess nun hier beim Einloggen in den Benutzeraccount (mit etwas Wartezeit). Damit das ganze unsichtbar erfolgt, verwende ich hierfür VB-Script:
Set WshShell = WScript.CreateObject("WScript.Shell")
sDate = Year(Now) & "-" & Month(Now) & "-" & Day(Now)
sLogfile = "c:\Logfiles\RoboCopy." & sDate & ".log"
Return = WshShell.Run("C:\Windows\system32\robocopy.exe /JOB:""PfadZurJobdatei.rcj"" /LOG+:" & sLogFile, 0, True)
Sowohl der nicht sichtbare Aufruf des Prozesses und auch das Schreiben in eine Logdatei mit variablen Namensteil funktioniert damit prima.
Was jetzt noch stört: Das (manuelle) Beenden der Aufgabe im Aufgabenplaner bewirkt leider nicht, dass der RoboCopy-Process beendet wird. Die Aufgabe steht dann zwar als "Beendet", jedoch läuft RoboCopy noch und hält auch den Zugriff auf die Logdatei.
Gibt es eine Möglichkeit, die Umsetzung zu verbessern, so dass über den Aufgabenplaner auch ein sauberes Beenden des Prozesses erfolgt?
Vielen Dank,
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 252763
Url: https://administrator.de/forum/robocopy-batch-laesst-sich-per-vb-script-ueber-aufgabenplanung-unsichtbar-starten-aber-nicht-beenden-252763.html
Ausgedruckt am: 30.04.2025 um 06:04 Uhr
3 Kommentare
Neuester Kommentar

Hallo Daniel,
starte das Script im Taskplaner doch mit einem anderen Useraccount. Dann ist es erstens für den gerade angemeldeten User sowieso unsichtbar und wenn du Robocopy so aufrufst
kannst du auch deine Datums Umgebungsvariablen in der Zeile nutzen, oder schreibst das alles in eine Batch.
Beim Beenden des Tasks wird dann auch dein Script beendet.
Gruß
jodel32
starte das Script im Taskplaner doch mit einem anderen Useraccount. Dann ist es erstens für den gerade angemeldeten User sowieso unsichtbar und wenn du Robocopy so aufrufst
cmd /c robocopy .......
Beim Beenden des Tasks wird dann auch dein Script beendet.
Gruß
jodel32

Ist das bzgl. der Rechte bedenklich und sollte ich daher noch ein anderes Userkonto für solche Aufgaben anlegen, oder kann ich den Adminaccount verwenden?
Hallo Daniel,ist eigentlich Jacke wie Hose, wenn jemand auf dein System physischen Zugriff hat wird er an jede Zugangsdaten kommen, egal ob du nun einen anderen Account oder den Admin-Account benutzt. Am besten ist es natürlich immer einen Account nur mit den Rechten auszustatten, die das Script tatsächlich benötigt. bei Bedarf lässt sich dieser Nutzer ja dann auf der Anmeldeseite via Registry-Eintrag ausblenden.
Gruß
jodel32