marcoborn
Goto Top

Variable an Batch-Datei übergeben

Hallo Forum,
ich muss in einem VB.NET-Skript eine Batch-Datei aufrufen. Das Batch-File benötigt jedoch eine Variable, die erst im Laufe des .NET-Skripts mit einem Wert belegt wird. Wie kann ich diese Variable an die Batch-Datei übergeben?

Vielen Dank,
M. Born

Content-ID: 209085

Url: https://administrator.de/forum/variable-an-batch-datei-uebergeben-209085.html

Ausgedruckt am: 06.04.2025 um 10:04 Uhr

colinardo
colinardo 04.07.2013 aktualisiert um 08:53:46 Uhr
Goto Top
Hallo M. Born,
die Variable als Kommandozeilen-Parameter beim Aufruf der Batch übergeben, und dann in der Batch mit %1 darauf zugreifen.

Grüße Uwe
MarcoBorn
MarcoBorn 04.07.2013 um 08:58:13 Uhr
Goto Top
Hallo Uwe,
wie übergebe ich den Parameter? Einfach mit einem Blank dazwischen oder mit Backslash? Könntest Du mir eine kurze Beispiel-Codezeile schreiben? Ich bin mit Batch-Dateien kaum bewandert.

Vielen Dank,
Marco
colinardo
colinardo 04.07.2013 aktualisiert um 09:07:05 Uhr
Goto Top
ja einfach ein Leerzeichen zwischen Batch und Parameter. Wenn der Parameter ein Leerzeichen enthält in Anführungszeichen einschließen.
deineBatch.cmd "Parameter1" "Parameter2"  
In der Batchdatei greifst du dann auf die Parameter mit %1 für Parameter1, %2 für Parameter2 , usw. zu.
MarcoBorn
MarcoBorn 04.07.2013 um 09:20:18 Uhr
Goto Top
Vielen Dank.
MarcoBorn
MarcoBorn 11.07.2013 um 09:57:38 Uhr
Goto Top
Hallo Forum,
nach ein paar Tagen Pause konnte ich mich jetzt wieder dem Problem widmen. Ich habe in VB folgenden Aufruf:

version_nr = Assembly.GetExecutingAssembly.GetName.Version.ToString
errorlvl = Shell("C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\mbo_start.bat " & version_nr)
MsgBox(errorlvl)

Rufe ich die Batch-Datei manuell auf, läuft das Skript sauber durch und ich erhalte errorlvl=0 zurück. Starte ich die Batch jedoch über den oben genannten Code erhalte ich immer errorlvl-Werte <>0, die auf einen Fehler hinweisen und auch das Ergebnis der Batch ist nicht korrekt. Die Batch selbst sieht wie folgt aus:

set _v=%1
verpatch.exe fkgendna-packed.xll /va %1 /s desc "FKGenDNA" /s copyright "(C) 2004-2013, DOK" /pv %1
@echo Errorlevel=%errorlevel%


Was mache ich hier falsch?
Biber
Biber 11.07.2013 um 10:16:32 Uhr
Goto Top
Moin MarcoBorn,

vermutlich wird beim Aufruf über Bande die Batchdatei aus einem anderen Laufwerk/Pfad gerufen.
Beim manuellen Aufruf der Batchdatei, der wahrscheinlich aus dem Verzeichnis "C:\Users\....\Verpatch\" erfolgt, wird in ebendiesem Verzeichnis auch die "verpatch.exe" gesucht und gefunden - bei einem Aufruf über VB auch dem Verzeichnis "X:\Y" wird diese Verpatch im Verzeichnis "X:\Y" gesucht und nicht gefunden.

-> Gib am besten der Verpatch.exe in der Batchdatei den vollständigen Pfad mit.

Oder lass die Batch-Hülle weg und rufe die Verpatch.exe aus VB direkt auf.

Grüße
Biber
MarcoBorn
MarcoBorn 11.07.2013 um 10:31:25 Uhr
Goto Top
Hallo Biber,
das mit den Paden habe auch schon probiert; ich hatte sie hier weggelassen, weil sie so viel Platz wegnehmen. Den Aufruf der Exe direkt aus VB mit Hilfe des folgenden Befehls scheitert leider ebenfalls:

version_nr = Assembly.GetExecutingAssembly.GetName.Version.ToString
errorlvl = Shell("C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\verpatch.exe C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\fkgendna-packed.xll /va version_nr /s desc ""FKGenDNA"" /s copyright ""(C) 2004-2013, DOK"" /pv version_nr " & version_nr)
MsgBox(errorlvl)

Was mache ich nur verkehrt?
colinardo
colinardo 11.07.2013 aktualisiert um 11:22:02 Uhr
Goto Top
Zitat von @MarcoBorn:
Was mache ich nur verkehrt?
Hallo MarcoBorn,
Der Shell Befehl in VB gibt nicht einen Fehlerwert zurück sondern die Task-ID des gestarteten Prozesses als Variant(Double).
Wenn du den Errorlevel des ausgeführten Befehls erhalten möchtest kannst du das so machen:
Set WshShell = CreateObject("Wscript.Shell")  
errorlvl = wshshell.Run ("""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\verpatch.exe"" ""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\fkgendna-packed.xll"" /va version_nr /s desc ""FKGenDNA"" /s copyright ""(C) 2004-2013, DOK"" /pv version_nr " & version_nr, 0, true)  
MsgBox(errorlvl)
oder mit dem Exec-Object der WSHSHELL:
Set WshShell = CreateObject("Wscript.Shell")  
set oExec = wshshell.Exec ("""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\verpatch.exe"" ""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\fkgendna-packed.xll"" /va version_nr /s desc ""FKGenDNA"" /s copyright ""(C) 2004-2013, DOK"" /pv version_nr " & version_nr)  
Do While oExec.Status = 0
     DoEvents
Loop
msgbox (oExec.ExitCode)
Grüße Uwe
MarcoBorn
MarcoBorn 11.07.2013 um 11:20:54 Uhr
Goto Top
Hallo Uwe,
das war der entscheidende Tipp. Ich musste zwar den Code etwas umbauen, aber jetzt läuft es. Der Code muss lauten:

errorlvl = wshshell.Run ("""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\verpatch.exe"" ""C:\Users\Born\Documents\SharpDevelop Projects\tools\Verpatch\fkgendna-packed.xll"" /va " & version_nr & " /s desc ""FKGenDNA"" /s copyright ""(C) 2004-2013, DOK"" & " /pv " & version_nr, 0, True)

Vielen Dank an alle, die mir geholfen haben,
Marco