Jump to content

Batch mit niedriger Priorität (Idle)


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

Link zu diesem Kommentar

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 ...)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

: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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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! :)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...