VB Script Problem bei den Elevation Tools

06/01/2010 - 17:19 von Thomas Steinbach | Report spam
Hallo,

ich habe hier ein VBS Script aus den Elevation Tools [1], bei
dem ich _vor_ der Ausfuehrung von einer Batchdatei in das Verzeichnis
wechseln mag (d.h eigentlich verbleiben will, denn es ist ja bereits das
aktive Verzeichnis), aus welchem elevate.vbs mit der Batchdatei aufgerufen
wird. btw: elevate.cmd/vbs liegt im Suchpfad.

Ich befinde mich z.B. in "C:\Program Files\My Prog" und
rufe eine svctest.bat liegt (noch) im gleichen Verzeichnis auf

svctest.bat
snip
net start | findstr /C:%~1 >nul
if ERRORLEVEL 1 goto END
if ERRORLEVEL 0 goto SVCACTION

:SVCACTION
elevate mybatch.bat "%~f1"

:END
snap

Dann aber ist es so dass ich mich unter C:\Windows\System32
befinde, wenn meine Batchdatei mybatch.bat ueber die elevate.vbs
zur Ausfuehrung kommt.

Ich benoetige es nun so dass ich eben in dem Verzeichnis verbleibe
bzw. zurueckkehre, aus dem meine Batch gestartet wird und brauche
es so, dass ich nicht innerhalb der aufgerufenen Batchdatei mybatch.bat
wechseln muss.

Wie kann man das umsetzen, bzw. wie muss ich elevate.vbs
anpassen, damit es so funktioniert wie ich es nun benoetige.

Bisher hatte ich probiert in elevate.cmd eine zusaetzliche Variable
in der Batch einzufueheren und mit

set ELEVATE_PATH=%CD%"

kann ich dann auch in der elevate.vbs ueber

strAppPath = objWshProcessEnv("ELEVATE_PATH")

das Verzeichnis ermitteln bzw. uebergeben. Allerdings hat ein folgendes:

objWshShell.CurrentDirectory = strAppPath

vor der Ausfuehrung von

objShell.ShellExecute strApplication, strArguments, "", "runas"

zeigt keinerlei Wirkung und auch eine Angabe des Pfades im
dritten Parameter:

objShell.ShellExecute strApplication, strArguments, strAppPath, "runas"

wechselt dennoch nach System32, bzw. zeigt mir eine aufgerufene
Batchdatei ueber %CD% noch das C:\Windows\System32 Verzeichnis an.

Das ist fuer mein Script aber unguenstig, da ich in meiner Batch
genau in dem Verzeichnis Operationen ausfuehren will, die dieses
betreffen, bzw. aus dem ich meine Batch aufrufe.

Hat hier jemand eine Idee wie es gehen koennte?


Thomas


[1] http://technet.microsoft.com/en-us/...ation.aspx
(DE) http://technet.microsoft.com/de-de/...ation.aspx
 

Lesen sie die antworten

#1 Uwe Kausch
08/01/2010 - 17:00 | Warnen spam
Hallo Thomas,

warum übergibst das aktuelle Verzeichnis (der Batch-Datei) nicht als Argument an das VBScript? Das könnte so aussehen ...
cscript mein.vbs %CD%

Im VBScript holst Du Dir das Argument mit "Wscript.Arguments.Item(0)". Mit "0" wird das erste Argument zurückgegeben. Hier das Script zum prüfen ...
mein.vbs option explicit
msgbox Wscript.Arguments.Item(0)
=
Deine Lösung mit der Umgebungsvariablen funktioniert nicht weil Du mit "set" nur eine "temporàre Umgebungsvariable" erstellst und diese nur in der Laufzeit innerhalb der aktuellen CMD-Session zur Verfügung stehen (musste ich auch erst nachlesen). Du könntest folglich in einer Eingabeaufforderung mit "set" ein Variable setzen und diese in einer zweiten Eingabeaufforderung NICHT abrufen können.

Grüße,
Uwe



Thomas Steinbach wrote:
Hallo,

ich habe hier ein VBS Script aus den Elevation Tools [1], bei
dem ich _vor_ der Ausfuehrung von einer Batchdatei in das Verzeichnis
wechseln mag (d.h eigentlich verbleiben will, denn es ist ja bereits das
aktive Verzeichnis), aus welchem elevate.vbs mit der Batchdatei aufgerufen
wird. btw: elevate.cmd/vbs liegt im Suchpfad.

Ich befinde mich z.B. in "C:\Program Files\My Prog" und
rufe eine svctest.bat liegt (noch) im gleichen Verzeichnis auf

svctest.bat
snip
net start | findstr /C:%~1 >nul
if ERRORLEVEL 1 goto END
if ERRORLEVEL 0 goto SVCACTION

:SVCACTION
elevate mybatch.bat "%~f1"

:END
snap

Dann aber ist es so dass ich mich unter C:\Windows\System32
befinde, wenn meine Batchdatei mybatch.bat ueber die elevate.vbs
zur Ausfuehrung kommt.

Ich benoetige es nun so dass ich eben in dem Verzeichnis verbleibe
bzw. zurueckkehre, aus dem meine Batch gestartet wird und brauche
es so, dass ich nicht innerhalb der aufgerufenen Batchdatei mybatch.bat
wechseln muss.

Wie kann man das umsetzen, bzw. wie muss ich elevate.vbs
anpassen, damit es so funktioniert wie ich es nun benoetige.

Bisher hatte ich probiert in elevate.cmd eine zusaetzliche Variable
in der Batch einzufueheren und mit

set ELEVATE_PATH=%CD%"

kann ich dann auch in der elevate.vbs ueber

strAppPath = objWshProcessEnv("ELEVATE_PATH")

das Verzeichnis ermitteln bzw. uebergeben. Allerdings hat ein folgendes:

objWshShell.CurrentDirectory = strAppPath

vor der Ausfuehrung von

objShell.ShellExecute strApplication, strArguments, "", "runas"

zeigt keinerlei Wirkung und auch eine Angabe des Pfades im
dritten Parameter:

objShell.ShellExecute strApplication, strArguments, strAppPath, "runas"

wechselt dennoch nach System32, bzw. zeigt mir eine aufgerufene
Batchdatei ueber %CD% noch das C:\Windows\System32 Verzeichnis an.

Das ist fuer mein Script aber unguenstig, da ich in meiner Batch
genau in dem Verzeichnis Operationen ausfuehren will, die dieses
betreffen, bzw. aus dem ich meine Batch aufrufe.

Hat hier jemand eine Idee wie es gehen koennte?


Thomas


[1] http://technet.microsoft.com/en-us/...ation.aspx
(DE) http://technet.microsoft.com/de-de/...ation.aspx

Ähnliche fragen