pantherstyle
Goto Top

Batch-Erklärungsbedarf

Hallo ich habe eine Batch bekommen mit der Aufgabe sie zu verstehen und im Anschluss zu verändern:
echo Cheking svn directory...
svn --version --quiet
IF %ERRORLEVEL%==0 GOTO :StartMerge
IF EXIST "N:\Program Files\svn-win32-1.6.1" ( GOTO UseSVN )  
echo could not found svn executable. 
GOTO ERROR 


rem ########################################################################
:UseSVN
echo setting PATH...
set PATH=N:\Program Files\svn-win32-1.6.1;%PATH%

:StartMerge
echo starting merge...

if "X%1"=="X" (echo usage: svn_merge.bat repository workdirectory datafile & goto ERROR ) ELSE set REPOS=%1  

if "X%2"=="X" (echo usage: svn_merge.bat repository workdirectory datafile & goto ERROR ) ELSE set WRKDIR=%2  

if "X%3"=="X" (echo usage: svn_merge.bat repository workdirectory datafile & goto ERROR ) ELSE set DATAFILE=%3  

Im unteren Teil des Codes ist ein Vergleich von X%1==X zu sehen, doch wozu dient der Vergleich und woher stammt %1 ?

Content-Key: 115883

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

Printed on: April 24, 2024 at 20:04 o'clock

Member: Biber
Biber May 12, 2009 at 11:53:54 (UTC)
Goto Top
Moin Pantherstyle,

die drei Prüfungen unten dienen nur dazu festzustellen, ob die Batchdatei auch mit DREI (nicht keinem, nicht einem, nicht nur zwei) Paramtern aufgerufen wird.

Denn es MÜSSEN, wie auch in der Fehlermeldung steht
.... repository workdirectory datafile

--> 3 Parameter an/mitgegeben werden
--> [%1=repository, %2= workdirectory; %3=datafile] sind Pflicht- und keine optionalen Parameter

Grüße
Biber
Member: Pantherstyle
Pantherstyle May 12, 2009 at 12:02:46 (UTC)
Goto Top
Nur woher werden denn die ANgaben für die 3 Positionen hergenommen? Bzw wie werden %1-3 belegt?
Mitglied: 60730
60730 May 12, 2009, updated at Oct 18, 2012 at 16:38:11 (UTC)
Goto Top
Zitat von @Pantherstyle:
Nur woher werden denn die ANgaben für die 3 Positionen
hergenommen? Bzw wie werden %1-3 belegt?
Servus,

"das" erklärt dir dann sicherlich jemand, dem du Hallo und Danke sagst.


Gruß
Member: linkit
linkit May 12, 2009 at 12:41:09 (UTC)
Goto Top
Das sind Kommandoparameter, wenn du in der Kommandozeile die Datei aufrufst, kannst du Paramter übergeben so wie bei den Kommadobefehlen von Windows:

Beispiel Befehl dir ==> der zeigt dir das aktuelle Verzeichnis
dir /s ==> zeigt dir das aktuelle und alle Unterverzeichnisse

/s ist somit %1

die paramter werden nach dem Befehl mit Leerzeichnen eingegeben: Befehl LEER %1 LEER %2 LEER %3
Member: Pantherstyle
Pantherstyle May 12, 2009 at 13:12:11 (UTC)
Goto Top
Sorry, wenn ich eine unhöfliche Art zu fragen habe, aber das Hallo dachte ich mir kommt am besten wie im realen Leben einmal am Tag wenn es noch nicht gesagt wurde. Das mit dem Danke kommt bei mir immer wenn das Problem für mich gelöst wurde. Falls der Link darauf hinweisen sollte, dass meine Frage zu unwichtig ist, dann werde ich das Forum nicht mehr belästigen und mir ein anderes suchen. Andernfalls hoffe ich, dass ich jetzt vom Stil her verstanden werde.

@linkit
Wenn ich das jetzt richtig verstehe müsste die Datei in der DOS-Shell aufgerufen und mit 3 Befehlparametern übergeben werden, oder hohlt sich das Script diese automatisch über den bisher geposteten Code?
Mitglied: 60730
60730 May 12, 2009 at 13:23:54 (UTC)
Goto Top
Servus,

der link diente dazu, dir begreiflich zu machen, warum ich so nett bin face-wink

Und da du deine Antwort wohl ausschliesslich nach der Überschrift des verlinkten Artiels verfasst hast - scheint mir mein anderes Vorurteil - liesst eh keiner - siehe Text im verlinkten Artikel - war keines.

Und nichts freut mich mehr, als widerlegt zu werden face-wink (edit -speziell in diesem Fall /edit)

meine Frage zu unwichtig ist, dann werde ich das Forum nicht mehr belästigen..

Du, bitte nicht so, weil dann komme ich dir mit dem gleichen O-Ton - wen der link den ich dir geschrieben habe zu unwichtig zum lesen ist - bla bla - auf das Niveau wollte ich eigentlich nicht.

Und ja - parameter werden angehängt. Siehe Text vom Biber face-wink

btw: es wäre auch tatsächlich "Heute" dein erster Text gewesen, wenn du es so genau wissen möchtest - ein Hallo hätte also laut deiner Aussage grade noch so gepasst face-wink

Gruß
Member: Pantherstyle
Pantherstyle May 12, 2009 at 13:45:19 (UTC)
Goto Top
Das "Hallo" habe ich mit der einleitenden Fragestellung an alle die dieses Thema ansehen wollen geliefert (morgen gäbe es noch eines, wenn das Problem akut bleibt). Der bösartige Unterton meiner Aussage war wirklich beabsichtigt, da ich mich der Dame aus deinem geposteten Link nahe gefühlt habe. Meine Fragen, stelle ich zumeist erst nach Stundenlangem durchdenken (Compiler spielens) und oder quälens von google. Da mir der passende Suchbegriff für google gefehlt hat (wie verwertet man %1 und DOS?) habe ich diverse Batch-Tutorials zum Teil erneut durchforstet und nichts darauf zutreffendes gefunden. Mir ist das selbst peinlich genug wenn ich mich vor Dummheit selbst geißeln muss, wenn Jemand in einem Forum meine Blockade löst. Leider ist es so manchem Antwortenden die höchste Intension zu zeigen, dass er es so drauf hat, dass er die professionellen Fehler in einem Text säuberlich aufzählt (z.B. es heißt DOS-Shell und nicht DOS-Box) ohne dabei das Problem nur ein wenig zu sichten. Keine Kritik an Eurem Forum, denn ich stelle hier gerne meine Fragen, da einem wirklich geholfen wird. Ich stelle auch meine Fragen so präzise wie es mir möglich ist, halt so wie ich sie selbst gerne lesen würde.

Tut mir jetzt doppelt sorry dass ich etwas patzig war aber Hilfe brauche ich denke ich weiterhin. Was ich mir noch nicht vollständig vorstellen kann ist die Form in der ein korrekter Aufruf der Datei erfolgen muss.

Wie ich es jetzt aufgefasst habe:

cd C:\Arbeitskopie\trunk\Daten\SoftwarePaket

svn_merge.bat \%1 \%2 \%3

...

"Done"


Aber eine derartige Eingabe habe ich noch nicht gesehen, weshalb ich vermutet habe, dass diese Daten vor der 1. Subroutine eingelesen werden. evtl durch
svn --version --quiet

Ich hoffe mal dass ich keine triviale Frage stelle (edit: Unterton wirklich nicht beabsichtigt)
Mitglied: 60730
60730 May 12, 2009 at 13:59:16 (UTC)
Goto Top
face-wink Servus, face-wink

Beispiel.cmd
if not "%1"=="" if not "%2"=="" if not "%3"=="" echo Parameter 1=%1-Parameter 2=%2-Parameter 3=%3  

schreib das in eine bat / cmd und starte es aus einer Dosbox, Dosshell oder in einer MS-DOS-Eingabeaufforderung mit test 1 2 3 oder anderen 3 mit leerzeichen getrennten Buchstaben / Wörtern.

Gruß
Member: geTuemII
geTuemII May 12, 2009 at 14:04:22 (UTC)
Goto Top
Hallo Panther,

willkommen erstmal im Forum.

[korrekter Aufruf der Datei]
cd C:\Arbeitskopie\trunk\Daten\SoftwarePaket
svn_merge.bat \%1 \%2 \%3

genau so. Oder halt die direkte Variante: C:\Arbeitskopie\trunk\Daten\SoftwarePaket\svn_merge.bat \%1 \%2 \%3

Im Code siehst du übrigens gleich dreifach, wie der Aufruf aussehen muß: usage: svn_merge.bat repository workdirectory datafile

In Zeile 17 wird geprüft, ob das erste Argument vorhanden ist wenn ja, wird mit dem Wert die Variable REPOS belegt, falls nicht, wird die obige Info über den korrekten Aufruf des Batches ausgegeben. In Zeile 19 wird überprüft, ob ein zweites, in Zeile 21, ob auch ein drittes Argument vorhanden ist und die Variablen entsprechend belegt.

geTuemII
Member: Pantherstyle
Pantherstyle May 12, 2009 at 14:04:56 (UTC)
Goto Top
Hallo und Danke (das war jetzt Spaßeshalber). Mit dieser Antwort kann ich gut weitermachen. Jetzt versteh ich nämlich wo er sich den Unsinn herhohlt und an was ich rumspielen muss um es zu verstehen. Das Thema ist wahrscheinlich noch aktuell, da noch nicht AlleKlarheiten beseitigt sind.

Aber auf jeden Fall dankeschön erstmal (das Danke jetzt weil echt geholfähn).
Member: Pantherstyle
Pantherstyle May 12, 2009 at 14:06:15 (UTC)
Goto Top
Ok jetzt kann das Topic geschlossen werden Danke Allen!