Batch Verschachtelung von Anführungszeichen

Pual

Ensign
Registriert
Nov. 2004
Beiträge
227
Hi,

ich habe folgendes Problem:

In meiner Firma soll eine Software installiert werden. Bevor diese installiert wird, soll in jedem Fall die Vorgängerversion deinstalliert werden. Dazu habe ich mir folgende Vorgehensweise überlegt:
Ich integriere in die .inf Datei der Softwareverteilung den Aufruf einer Batchdatei, die den folgenden Befehl enthält.

Der Befehl soll lauten:
runas /u:[DOMÄNE\Benutzer] "start /wait "msiexec /x "[Pfad mit langen Dateinamen und Leerzeichen]"""

Mein Problem bei dieser Sache ist, dass ich dem runas Befehl einen Parameter in Anführungszeichen übergeben muss, der wieder einen Parameter in Anführungszeichen enthält usw.
Ich habe also "verschachtelte" Anführungszeichen. Leider weiß ich nicht, wie die Syntax aussehen muss, damit "runas" "start" mit seinen Parametern und dieses wieder "msiexec" mit seinen Parametern erkennen kann.

Leider bin ich auch aus meiner Internetrecherche nicht schlau geworden. Es so zu schreiben, wie ich es im obigen Beispiel getan habe, führt leider zu Problemen.

Wer kann mir helfen? :(

P.S: Kann ich ein "runas" mit dem SYSTEM-Account durchführen? Das wäre nämlich mein Ziel...
 
Die Anführungszeichen nach start /wait kannst du weglassen, das löst das Problem nicht, aber vereinfacht es ein wenig.
Code:
runas /u:[DOMÄNE\Benutzer] "start /wait msiexec /x "[Pfad]""

Vielleicht funktioniert sogar der Aufruf
Code:
runas /u:[DOMÄNE\Benutzer] start /wait msiexec /x "[Pfad]"
 
Sorry, die Entscheidung meines Chefs bzgl.

In meiner Firma soll eine Software installiert werden. Bevor diese installiert wird, soll in jedem Fall die Vorgängerversion deinstalliert werden.

hat sich nun geändert. Nun muss die Vorgängerversion garnicht mehr deinstalliert werden. Gut dass ich stundenlang dran gebastelt habe :freak:

...und Danke für eure Ratschläge. Vielleicht komm ich in einem anderen Zusammenhang ja nochmal drauf zurück.
 
Hatte ein sehr ähnliches Problem und habe mich durchgekämpft.
Die Lösung liegt im Befehl 'cmd' und in der Verwendung von Escape-Zeichen für '"'.
Puals Befehl müßte theoretisch so aussehen:

runas /u:[DOMÄNE\Benutzer] "cmd /c start /wait msiexec /x \"[Pfad mit langen Dateinamen und Leerzeichen]\""


Zur Herleitung des Befehls siehe mein folgendes Beispiel:

1) Ein VBScript soll ausgeführt werden.
Dazu wird das Programm 'wscript' mit dem Namen des Scripts als Parameter aufgerufen.
Auf den Namen des Scripts folgt noch ein Parameter für des Script selbst.
Da es sich bei beiden Parametern um Dateien inkl. Pfad handelt, ist es ratsam, sie jeweils in doppelte Anführungszeichen zu setzen.

wscript "X:\PathY\FileA.vbs" "X:\PathY\FileB.txt"


2) Das VBScript soll unter einem anderen Benutzerkonto laufen, weil der Benutzer, der diese Batchdatei ausführt, nicht genug Rechte hat.
Dies wird durch 'runas /user:' erreicht. Der Benutzer wird dann zur Eingabe des Kennwortes für das angegebene Benutzerkonto aufgefordert.
'runas' erwartet nach dem Benutzernamen das auszuführende Kommando komplett umrahmt von '"' (doppelte Anführungszeichen / Gansefüße).
Damit 'runas' die doppelten Anführungszeichen, die innerhalb des Befehls vorkommen, ignoriert, müssen diese mit '\' escaped werden, also '\"'.
Alternativ kann man für 1 doppeltes Anführungszeichen auch 3 doppelte Anführungszeichen setzen, also '"""'. Übersichtlicher ist das aber auch nicht.

runas /user:USERXY "wscript \"X:\PathY\FileA.vbs\" \"X:\PathY\FileB.txt\""


3) Ein Fenster soll geöffnet bleiben, bis das VBScript beendet ist, damit man sieht, daß es läuft.
Das wird mit 'start /wait' erreicht.
'cmd' ist nötig, weil 'runas' scheinbar mit 'start' direkt nicht klarkommt: Fehlermeldung 'falscher Parameter' oder so ähnlich.
'/c' bewirkt, daß das cmd-Fenster nach Ausführung von 'start' sofort geschlossen wird.

runas /user:USERXY "cmd /c start /wait wscript \"X:\PathY\FileA.vbs\" \"X:\PathY\FileB.txt\""


4) Während das VB Script läuft, soll im geöffneten Fenster 'Moment...' angezeigt werden, damit der Banutzer nicht nur schwarz sieht.
Dazu wird das Kommando, das unter 'cmd' ausgeführt wird, als 2 mit '&' verkettete Kommandos gestaltet (echo ... & start ...).

runas /user:USERXY "cmd /c echo Moment... & start /wait wscript \"X:\PathY\FileA.vbs\" \"X:\PathY\FileB.txt\""
:cool_alt:


P.S: "runas" mit dem SYSTEM-Account:
Geht nicht, weil "runas" ein Kennwort verlangt. Falls SYSTEM eins hat, kennt es keiner.
:(


Kann mir jemand sagen, warum die Worte "runas" und "start" immer orange und fett angezeigt werden? In der Vorschau ist das noch nicht der Fall.
:grr:
 
Zuletzt bearbeitet: (Formatierung)
Pual schrieb:
Kann ich ein "runas" mit dem SYSTEM-Account durchführen? Das wäre nämlich mein Ziel...

Geht. Nicht mit runas, aber geht. Es gab mal ein Tool namens "cmdsvc.exe", was genau das bewerkstelligte, allerdings finde ich es nicht mehr wieder.
Das ist allerdings dermaßen gefährlich, dass ich es nie benutzen würde.
 
Zurück
Oben