thecaptain
Goto Top

BATCH - START Parameterübergabe

Hallo,

ich bin dabei einige Abläufe auf unseren Server weiter zu automatisieren. Dazu verwende ich Batch-Dateien, die mit dem Befehl "START" andere Programme aufrufen. "START" deshalb, weil man dort auch die Prozesspriorität festlegen kann. Jetzt ergibt sich aber ein Problem, wenn ich Parameter mitgeben möchte.

Scheinbar unterstützt "START" nur maximal zwei Parameter. Ist das korrekt, oder kann man das Ding doch irgendwie noch überreden? Normalerweise brauche ich nämlich vier oder fünf.

Um das Problem etwas einzukreisen, hatte ich mir diese beiden simplen Testdateien gebaut.
Test50 - Parameter-Weitergabe1.cmd
SET para1=TEST
SET para2=Ausgabe
SET para3="Hier ein Satz mit Spaces."  

START "" "Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% %para3%  

PING -n 5 127.0.0.1 > NUL

Test50 - Parameter-Weitergabe2.cmd
ECHO Parameter 0 enthaelt immer den eigenen Pfad mit Dateinamen:
ECHO. %0
ECHO.
ECHO.

ECHO Die folgenden Ausgaben stammen alle aus der ersten CMD.
ECHO P1 und P2:
ECHO. %1 - %2
ECHO P3:
ECHO. %3

PING -n 15 127.0.0.1 > NUL

Habe ich in der ersten Datei mehr als zwei Parameter angegeben, kommt nur dieser Müll dabei heraus:
Der Befehl "D:\Eigene" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Mit nur zwei Parametern klappt es vernünftig:
Parameter 0 enthaelt immer den eigenen Pfad mit Dateinamen:
"D:\Eigene Dateien\Eigene Programme\CMD\_VORLAGEN und TESTS\Test50 - Parameter-Weitergabe2.cmd"


Hinweis: Die folgenden Ausgaben stammen alle aus der ersten CMD.
P1 und P2:
TEST - Ausgabe
P3:

Content-ID: 166639

Url: https://administrator.de/contentid/166639

Ausgedruckt am: 25.11.2024 um 19:11 Uhr

Skyemugen
Skyemugen 20.05.2011 um 14:53:11 Uhr
Goto Top
Aloha,

Parameter mit Leerzeichen würde ich ja dann mit fliegenden Zollstöcken übergeben ... "%para3%" und wenn man unbedingt will wieder ohne aufrufen echo %~3
EDIT funktioniert mit START aber nicht, daher Blödsinn

greetz André

P.S.: Die Beschränkung dürfte einstellig sein, also 9 bin aber nicht sicher und will's jetzt auch nicht testen
thecaptain
thecaptain 20.05.2011 um 14:57:38 Uhr
Goto Top
Ich hätte mir ganz schön heftig an die Stirn gehauen, wenn das jetzt das Problem gewesen wäre. face-big-smile

Ist es aber nicht, gleicher Fehler. Hab ich (oder meine Stirn je nachdem) ja nochmal Glück gehabt.

P.S.: Die Beschränkung dürfte einstellig sein, also 9 bin aber nicht sicher und will's jetzt auch nicht
testen

Bei "CALL" zumindest kann ich das bestätigen (hab ich bei der Google-Suche vorhin schon irgendwo gelesen). Dort kann ich auch problemlos meine fünf Parameter mitgeben ohne das er rumspinnt. Aber "CALL" unterstützt halt leider keine Prozessprioritäten.
Skyemugen
Skyemugen 20.05.2011 um 15:11:28 Uhr
Goto Top
Aloha,

hm, hast ja auch schon Zollstöcke, anyway ihn stören die Zollstöcke beim Aufruf ...

Sprich: kein Parameter darf bei START Zollzeichen enthalten oder so mit START aufgerufen werden, wenn du den zweiten Parameter z.B. SET para2=Ausgabe Keks setzt, wirst du feststellen, dass %3==Keks ...

greetz André

P.S.: Bei mir ist %0 btw nur der Dateiname ...

EDIT P.S.: 9 Paramter sind die Grenze %10 ergäbe %1 mit einer Null dran ^_^
thecaptain
thecaptain 20.05.2011 um 15:30:21 Uhr
Goto Top
hm, hast ja auch schon Zollstöcke, anyway ihn stören die Zollstöcke beim Aufruf ...
Yoda: "Recht du hast."

SET para1=TEST
SET para2=Ausgabe
SET para3=Satz mit Space

START "" "Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% %para3%  

PING -n 5 127.0.0.1 > NUL
Ab hier behandelt er den Inhalt von para3 wie drei eigene Parameter. Also in dem Beispiel hätte er jetzt fünf, da ja para1 und para2 ebenfalls nen Inhalt haben.
Hinweis: Die folgenden Ausgaben stammen alle aus der ersten CMD.
P1 und P2:
TEST - Ausgabe
P3:
'Quotes
P4:
mit
P5:
Space'

Aber wie biege ich ihm trotzdem nen Parameter mit Leerzeichen bei? Beim späteren Einsatz will ich so Pfade übergeben, die leider auch mal ein Space enthalten können? Hochkomma hilft mir auch nicht. Es gibt zwar keinen Fehler, aber richtig übernehmen tut er es auch nicht.

P.S.: Bei mir ist %0 btw nur der Dateiname ...
Bei CALL ist es der gesamte Pfad. Damit hatte ich es vorher getestet, daher der Text. Bei START ist es nur der Dateiname.
Skyemugen
Skyemugen 20.05.2011 um 15:35:10 Uhr
Goto Top
Aloha,

nun, dann ohne START
"Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% "%para3%"

greetz André
thecaptain
thecaptain 20.05.2011 um 15:39:15 Uhr
Goto Top
Hmm, danke erstmal. Mein erstes Problem konnten wir ja definitiv lösen. Leider möchte ich auf START wg. der Möglichkeit bei den Prozessprioritäten eigentlich nicht verzichten. Da muss ich mir wohl noch was einfallen lassen.

Nur mal so: So soll das ganze dann später im Einsatz mal aussehen.
START "" /HIGH /WAIT "Files\robocopy.cmd" "D:\TEST1" "\\TESTSERVER02\D$\Pfadname mit Spaces\TEST2" "Robocopy-TEST" "TESTSERVER01"  
Skyemugen
Skyemugen 20.05.2011 um 15:49:06 Uhr
Goto Top
Aloha,

nun dann eventuell so:
START /HIGH /WAIT "" /D"E:\Pfad\Dort wo Test50 liegt" "Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% "%para3%"
allerdings darf das ursprüngliche Skript mit den Variablen nicht in demselben Verzeichnis liegen

greetz André
thecaptain
thecaptain 20.05.2011 um 16:01:53 Uhr
Goto Top
Hi,

danke für deine Mühe, aber START spinnt immer noch rum. Ich werde es jetzt so machen:
CALL "Test50 - Parameter-Weitergabe2.cmd" "%para1%" "%para2%" "%para3%"  
Bei START mit "/high" arbeiten zu können ist zwar schön, aber nicht lebensnotwendig. Wichtiger ist "/wait" und das bringt CALL ja schon von Natur aus mit.

Wenn noch jemandem was einfallen sollte natürlich immer her damit. ^^
Skyemugen
Skyemugen 20.05.2011 um 16:06:14 Uhr
Goto Top
Zitat von @thecaptain:
Hi,

danke für deine Mühe, aber START spinnt immer noch rum. Ich werde es jetzt so machen:

Aloha,

kann ich nicht nachvollziehen, bei mir klappt die Variante mit dem Schalter /D und dem Pfad der aufzurufenden Datei + Parameter mit Zollzeichen ...

greetz André
bastla
bastla 20.05.2011 um 16:08:16 Uhr
Goto Top
@Skyemugen
9 Paramter sind die Grenze %10 ergäbe %1 mit einer Null dran ^_^
... allerdings gäbe es da zu Not noch "shift" ... face-wink

Grüße
bastla
thecaptain
thecaptain 20.05.2011 um 16:09:53 Uhr
Goto Top
Der Befehl "Test50" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Sobald bei den Parametern irgendwo " stehen zeigt er den Fehler. Welches Windows benutzt du? Ich hab hier ein Win7 x64 mit aktuellem Patch-Stand.
bastla
bastla 20.05.2011 um 16:10:34 Uhr
Goto Top
Hallo thecaptain!

Ist es denn unumgänglich, im Namen/Pfad des aufzurufenden Batches Leerzeichen zu verwenden? Wenn nicht, könnte
START "" /HIGH /WAIT Files\robocopy.cmd "D:\TEST1" "\\TESTSERVER02\D$\Pfadname mit Spaces\TEST2" "Robocopy-TEST" "TESTSERVER01"
funktionieren ...

Grüße
bastla
Skyemugen
Skyemugen 20.05.2011 um 16:11:10 Uhr
Goto Top
Aloha bastla,

*pfeif* schon mal gehört aber selbst mit der Beschreibung des Befehls wäre es mir derzeit ein Rätsel einen 10. oder 11. Parameter zu übergeben *grübel*

Eventuell kannst du mich mit einem Beispiel erleuchten?

greetz André
bastla
bastla 20.05.2011 um 16:17:49 Uhr
Goto Top
@Skyemugen
Bittesehr:
@echo off & setlocal
call :UP 1 2 3 4 5 6 7 8 9 10 11
goto :eof

:UP
echo Parameter 1: %1
echo Parameter 2: %2
echo Parameter 3: %3
echo Parameter 4: %4
echo Parameter 5: %5
echo Parameter 6: %6
echo Parameter 7: %7
echo Parameter 8: %8
echo Parameter 9: %9
shift
echo Parameter 10: %9
shift
echo Parameter 11: %9
Wenn Du nicht wissen solltest, wie viele Parameter ankommen, dann etwa so:
@echo off & setlocal
call :UP 1 2 3 4 5 6 7 8 9 10 11
goto :eof

:UP
set /a Nr=1
:Loop
if .%1==. goto :eof
echo Parameter %Nr%: %1
set /a Nr+=1
shift
goto :Loop
Grüße
bastla
thecaptain
thecaptain 20.05.2011 um 16:23:57 Uhr
Goto Top
"\\TESTSERVER02\D$\Pfadname mit Spaces\TEST2" "Robocopy-TEST" "TESTSERVER01"
*BOOOOM*
Das klappt! Und ich weiß jetzt auch warum: Das zweite Skript darf keine Leerzeichen im Dateinamen haben und ich darf für die Parameter keine Variablen verwenden.

Ich hab das hier jetzt mal auf meinen Test umgemünzt:
START "" /HIGH /WAIT Test50-Parameter-Weitergabe2.cmd "TEST" "Ausgabe" "Quotes mit Space"  

So funktioniert es!

VIEEELEN DANK und ein schönes WE!
bastla
bastla 20.05.2011 um 16:29:18 Uhr
Goto Top
Hallo thecaptain!

Freut mich, wenn's soweit klappt face-smile - allerdings mag ich
ich darf für die Parameter keine Variablen verwenden.
nicht so recht glauben ...

Grüße
bastla
thecaptain
thecaptain 23.05.2011 um 10:00:52 Uhr
Goto Top
Hm, ich weiß auch nicht so recht wo das Problem liegt. Sobald ich dort eine Variable verwende, gibt es wieder den ursprünglichen Fehler. Vielleicht gibt es noch irgendwo eine andere Kleinigkeit die das verursacht. Ich bin aber zu faul jetzt noch zu suchen, zumal ja alles was ich brauche derzeit klappt.