BloodySword 10 Geschrieben 19. Dezember 2008 Melden Teilen Geschrieben 19. Dezember 2008 Ich möchte gerne alle Befehle und Programme in einer Batch mit niedrigster Priorität ausführen lassen. Der Dienst für den Taskplaner soll diese dann unsichtbar im Hintergrund ausführen. Wie kann ich Programme wie xcopy mit niedrigster Priorität ausführen lassen, ohne mir selber ein Tool in C++ oder VB.NET schreiben zu müssen? Vielen Dank. Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 21. Dezember 2008 Melden Teilen Geschrieben 21. Dezember 2008 was wäre mit dem systemeigenen kommando "start"? Zitieren Link zu diesem Kommentar
BloodySword 10 Geschrieben 21. Dezember 2008 Autor Melden Teilen Geschrieben 21. Dezember 2008 Wie verhindere ich, dass die Befehle dann gleichzeitig ausgeführt werden? Normal geht der die ja wie ein Script ab, aber durch "start" wartet er nicht bis zum Programmende. Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 21. Dezember 2008 Melden Teilen Geschrieben 21. Dezember 2008 einerseits liesse sich per start /wait /low "jobname" "kommando" && "noch-mehr-von-dem-senf" eine einzeilige lösung basteln, dabei - ich geb es gern zu - kommt man schnell an die grenzen des normal erträglichen; sobald befehlszeilen selbst lang sind oder leerzeichen benötigen wird's halt immer wilder. zum anderen liesse sich natürlich eine lösung stricken, die im scheduler selbst nur eine cmd startet, in der dann erst die "start /wait [...] && [...]"-aufrufe enthält oder gar mit "()" befehle schachtelt ... meine antwort bleibt nicht zufriedenstellend, was ganz genau du tun willst, kann so vielseitig sein ... also eines sollte fast immer gehen im scheduler: cmd /c start /wait /low "alias" "..\job.cmd" - das garantiert erstens, dass er durch "cmd /c" eine "echte" batchumgebung nutzt, zweitens durch "start /low /wait" das er die umgebung erst wieder schliesst, wenn der job erledigt ist und mit niedriger priorität ausgeführt wird. es garantiert hier aber nicht, dass alle aufrufe aus der .cmd mit niedriger prio ausgeführt werden - dazu müssten die befehle in jeder zeile mit start /low begonnen werden. ohne hier grossartig zu programmieren, sei dir aber doch nahe gelegt, eine scriptsprache zu nutzen. solche automatisierungen erledige ich sehr gern mit autoit, aber auch jscript oder vbscript tun es. da du von xp sprichst, ist powershell ja eher indiskutabel (da kommt jetzt sicher gleich protest ...) Zitieren Link zu diesem Kommentar
BloodySword 10 Geschrieben 21. Dezember 2008 Autor Melden Teilen Geschrieben 21. Dezember 2008 Auch wenn du so viel geredet hast, habe ich mir daraus die Lösung erraten: cmd /c start /wait /low "job.cmd" in job.cmd: start /low bla.exe bla bla bla ... Sollte doch gehen oder? Das Script soll einfach nur ein Mal am Tag die Registry-Hives per Volume-Schattenkopie sichern. Dazu habe ich mir in .NET ein Tool namens SCOPY.EXE geschrieben. (S = Shadow). Dann werden mittels RAR ein Paar andere Sachen gesichert und das war's. Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 21. Dezember 2008 Melden Teilen Geschrieben 21. Dezember 2008 :wink2: naja, war wohl zuviel kaffee heut morgen. sorry ;) geänderte antwort: NEIN, der /wait muss in den batchzeilen auftauchen, sonst führt er sie immer noch gleichzeitig aus. nimm halt "&" oder "&&" - oder sind das sooo viele zeilen die du brauchst? – jetzt sehe ich gerade deinen nachtrag mit scopy.exe. für mehrere aufrufe mit parameter (scopy <hivepath>) wäre dann der for-befehl sicherer, das erspart die das gebastel mit start /wait. Zitieren Link zu diesem Kommentar
BloodySword 10 Geschrieben 21. Dezember 2008 Autor Melden Teilen Geschrieben 21. Dezember 2008 Hatte /wait vergessen, sorry. Wie genau geht dann die Syntax? beispiel: scopy /L registry.clst Wird zu start /wait /idle scopy /L registry.clst So einfach ist es sicherlich nicht, oder? Scopy wird nur einmal aufgerufen, da sonst ja jedes mal der VSS-Service neu gestartet werden muss und jedes mal für jede Datei ein Snapshot angelegt werden muss. Daher lasse ich das ganze Volume einmal Snapshotten und eine Dateiliste (registry.clst) abarbeiten. Edit: Der Grund weshalb ich es Idle haben will ist, dass diese Prozedur eben mich bei der Arbeit nicht stört. Diese Sicherungen sollen mir helfen, wenn mal nichts mehr geht, dass ich dann Backups der Registryhives habe. Wie kann ich es anstellen, dass an den Backups Zeit und Datum drangehangen werden, damit die nicht immer überschrieben werden? Wenn der Ordner die Größe von 128MB überschreitet, sollen die ältesten gelöscht werden. Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 22. Dezember 2008 Melden Teilen Geschrieben 22. Dezember 2008 zur syntax start /wait /low scopy [...] ist korrekt, dennoch würde ich zur fehlerminimierung start /wait /low "jobid" "scopy [...]" schreiben. /low ist imho die priorität "im leerlauf", /idle ist mir nur unter nt4 bekannt, gibt aber tatsächlich auch keine fehlermeldung zurück ... mhhm. zum zeitproblem set actual=%time:~,-6%_%date:~,-5% if '=='%actual:~,-10% set actual=%actual:~1% scopy /L regdump_%actual%.clst oder "now.exe" verwenden aus den reskit tools, denn hier wird immer eine führende null bei einstelliger stundenzeit geschrieben. ausgabe muss auch hier umgeleitet oder eben in variablen "zerpflückt" werden. Zitieren Link zu diesem Kommentar
BloodySword 10 Geschrieben 22. Dezember 2008 Autor Melden Teilen Geschrieben 22. Dezember 2008 Das mit scopy muss ich mit dem CurrentDirectory lösen. Ich muss dann eben das Datum in ein Ordner schreiben: f:\backups\registry_%actual%\user\ntuser.dat , ntuser.dat.log , ntuser.ini f:\backups\registry_%actual%\system\ ... Es sei denn du hast eine Lösung um die Dateiliste jedes Mal neu zu generieren. Geht das mit copy con und der %actual% variable? Das mit den "Leading-Zeros" ist nicht so schlimm. Wie löse ich das mit dem automatischen Löschen? Das soll alles vollautomatisch im Hintergrund laufen während ich arbeite. Am besten wäre es noch, wenn ich die Pfade per Übergabeparameter angeben könnte. So könnte ich das Script sehr einfach auf andere Systeme installieren. Jetzt habe ich folgendes Script zum Testen: set cpr=C:\Programme\WinRAR\rar.exe set cpm=u -m5 -mdg -rr10%% -dh -ep1 set mirpath=D:\Daten\WinTechnik\MirandaDev set mozprof=D:\Mozillaprofile set smspath=D:\Daten\WinTechnik\mobiletools\Motorola\MotoSMSManager\Data set usettings=F:\Backup\windows\user\settings set winsys=F:\Backup\windows\system set umisc=F:\Backup\windows\user\misc set copylist=registry.clst set actual=%date% start /b /wait /low %cpr% %cpm% %usettings%\miranda_%actual%.rar %mirpath% start /b /wait /low %cpr% %cpm% %usettings%\mirandaprofiles_%actual%.rar %mirpath%\*.dat start /b /wait /low %cpr% %cpm% %umisc%\sms_%actual%.rar %smspath% start /b /wait /low %cpr% %cpm% %usettings%\thunderbird_%actual%.rar %mozprof%\Thunderbird start /b /wait /low %cpr% %cpm% %usettings%\firefox_%actual%.rar %mozprof%\Firefox md tmpreg start /b /wait /low scopy /L %copylist% start /b /wait /low %cpr% %cpm% -sfxWinCon.SFX %winsys%\registry_%actual%.rar tmpreg rd /s /q tmpreg copy backup.cmd F:\Backup\windows\user\misc\backup.cmd copy registry.clst F:\Backup\windows\user\misc\registry.clst exit Nun geht es, aber ganz ohne eigenes Tool kam ich nicht aus. Ich musste noch ein Programm schreiben, welches Programme versteckt startet. Kann ich das auch per Bordmittel machen? Zitieren Link zu diesem Kommentar
real_tarantoga 11 Geschrieben 22. Dezember 2008 Melden Teilen Geschrieben 22. Dezember 2008 wegen der anpassung an andere rechner: statt fixen pfaden kannst du übergabe parameter definieren, also aufruf des batches mittels: copyjob.cmd %1 %2 %3 in der batch erfolgt dann am anfang gleich eine abfrage entweder als sprungmarke ohne rückkehr: if '=='%1 goto exiterror oder als subroutine mit rückkehr (falls eingaben abgefangen werden können): if '=='%2 call :subcallerror [...] :exiterror echo. echo Parameter nicht angegeben ! echo Beispieltext ... pause >nul exit :subcallerror echo. echo Parameter jetzt angeben ! echo Beispieltext ... choice /n /d <args> /t 30 /m "Werteingabe: " [...] goto :EOF besser wäre hier natürlich der einbau eines js/vbs/au3-scriptes das per InputBox() die Pfade speichert und dann als variablen an die stapelverarbeitung übergibt. gruss, r_t ps: ich bin jetzt auf dem weg zur family, erst wieder silvester online. viel glück und auch gute feiertage! :) Zitieren Link zu diesem Kommentar
BloodySword 10 Geschrieben 22. Dezember 2008 Autor Melden Teilen Geschrieben 22. Dezember 2008 Ja das werde ich mir auch mal basteln, wenn es sich lohnt. Also Problem gelöst. Es gibt aber noch ein anderes Problem, aber dafür mache ich mal einen neuen Thread auf, da ich es auch als allgemeines Thema diskutieren kann. Vielen Dank und viel Spaß, Frohe Weihnachten und einen Guten Rutsch ins neue Jahr 2009! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.