Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

BATCH - START Parameterübergabe

Frage Microsoft Windows Tools

Mitglied: thecaptain

thecaptain (Level 1) - Jetzt verbinden

20.05.2011, aktualisiert 14:25 Uhr, 13559 Aufrufe, 17 Kommentare

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
01.
SET para1=TEST 
02.
SET para2=Ausgabe 
03.
SET para3="Hier ein Satz mit Spaces." 
04.
 
05.
START "" "Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% %para3% 
06.
 
07.
PING -n 5 127.0.0.1 > NUL
Test50 - Parameter-Weitergabe2.cmd
01.
ECHO Parameter 0 enthaelt immer den eigenen Pfad mit Dateinamen: 
02.
ECHO. %0 
03.
ECHO. 
04.
ECHO. 
05.
 
06.
ECHO Die folgenden Ausgaben stammen alle aus der ersten CMD. 
07.
ECHO P1 und P2: 
08.
ECHO. %1 - %2 
09.
ECHO P3: 
10.
ECHO. %3 
11.
 
12.
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:
Mitglied: Skyemugen
20.05.2011 um 14:53 Uhr
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
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 14:57 Uhr
Ich hätte mir ganz schön heftig an die Stirn gehauen, wenn das jetzt das Problem gewesen wäre.

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.
Bitte warten ..
Mitglied: Skyemugen
20.05.2011 um 15:11 Uhr
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 ^_^
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 15:30 Uhr
hm, hast ja auch schon Zollstöcke, anyway ihn stören die Zollstöcke beim Aufruf ...
Yoda: "Recht du hast."

01.
SET para1=TEST 
02.
SET para2=Ausgabe 
03.
SET para3=Satz mit Space 
04.
 
05.
START "" "Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% %para3% 
06.
 
07.
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.
Bitte warten ..
Mitglied: Skyemugen
20.05.2011 um 15:35 Uhr
Aloha,

nun, dann ohne START
"Test50 - Parameter-Weitergabe2.cmd" %para1% %para2% "%para3%"
greetz André
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 15:39 Uhr
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.
01.
START "" /HIGH /WAIT "Files\robocopy.cmd" "D:\TEST1" "\\TESTSERVER02\D$\Pfadname mit Spaces\TEST2" "Robocopy-TEST" "TESTSERVER01"
Bitte warten ..
Mitglied: Skyemugen
20.05.2011 um 15:49 Uhr
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é
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 16:01 Uhr
Hi,

danke für deine Mühe, aber START spinnt immer noch rum. Ich werde es jetzt so machen:
01.
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. ^^
Bitte warten ..
Mitglied: Skyemugen
20.05.2011 um 16:06 Uhr
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é
Bitte warten ..
Mitglied: bastla
20.05.2011 um 16:08 Uhr
@Skyemugen
9 Paramter sind die Grenze %10 ergäbe %1 mit einer Null dran ^_^
... allerdings gäbe es da zu Not noch "shift" ...

Grüße
bastla
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 16:09 Uhr
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.
Bitte warten ..
Mitglied: bastla
20.05.2011 um 16:10 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
20.05.2011 um 16:11 Uhr
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é
Bitte warten ..
Mitglied: bastla
20.05.2011 um 16:17 Uhr
@Skyemugen
Bittesehr:
01.
@echo off & setlocal 
02.
call :UP 1 2 3 4 5 6 7 8 9 10 11 
03.
goto :eof 
04.
 
05.
:UP 
06.
echo Parameter 1: %1 
07.
echo Parameter 2: %2 
08.
echo Parameter 3: %3 
09.
echo Parameter 4: %4 
10.
echo Parameter 5: %5 
11.
echo Parameter 6: %6 
12.
echo Parameter 7: %7 
13.
echo Parameter 8: %8 
14.
echo Parameter 9: %9 
15.
shift 
16.
echo Parameter 10: %9 
17.
shift 
18.
echo Parameter 11: %9
Wenn Du nicht wissen solltest, wie viele Parameter ankommen, dann etwa so:
01.
@echo off & setlocal 
02.
call :UP 1 2 3 4 5 6 7 8 9 10 11 
03.
goto :eof 
04.
 
05.
:UP 
06.
set /a Nr=1 
07.
:Loop 
08.
if .%1==. goto :eof 
09.
echo Parameter %Nr%: %1 
10.
set /a Nr+=1 
11.
shift 
12.
goto :Loop
Grüße
bastla
Bitte warten ..
Mitglied: thecaptain
20.05.2011 um 16:23 Uhr
"\\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:
01.
START "" /HIGH /WAIT Test50-Parameter-Weitergabe2.cmd "TEST" "Ausgabe" "Quotes mit Space"
So funktioniert es!

VIEEELEN DANK und ein schönes WE!
Bitte warten ..
Mitglied: bastla
20.05.2011 um 16:29 Uhr
Hallo thecaptain!

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

Grüße
bastla
Bitte warten ..
Mitglied: thecaptain
23.05.2011 um 10:00 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Windows 10
Nach Start kein Netzwerk (11)

Frage von MegaGiga zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...