# Batch Commandos. Was bedeuten diese Anweisungen?



## chrysler (26. Februar 2008)

Ich habe bei http://de.wikibooks.org/wiki/Batch-Programmierung:_Programmierungs_Hilfen#Minimiert_ausf.C3.BChren diesen Code gefunden. Er startet die batch minimiert. Kann mir jemand sagen, wie der Aufbau funktioniert?


```
@set !=||(set !=1&start "%~dpnx0" /min cmd /c %0 %*&set !=&goto :eof)
```


----------



## olqs (26. Februar 2008)

Also hier kann ich dir nur zum Teil weiterhelfen.

Mal im Groben:
Diese Zeile am anfang eine Batch bewirkt, dass sich die Batch Datei nochmal selbst minimiert startet.

Die set Konstruktion kann ich dir im genauen leider nicht erklären. Hab sowas auch noch nie gesehen. Es muss aber eine Art Abbruchbedingung sein, um keine Endlosschleife zu produzieren. Es wird ja diese Zeile Code auch beim zweiten Mal ausgeführt und da muss eben das "||" logische Oder bewirken, dass der Code, in Klammern danach nicht mehr evaluiert wird.

Der Code in den Klammern sind 3 eigenständige Befehle. Der Trenner dafür ist das &.
Testen kannst du das z.B mit:

```
echo "ein"&echo "test"
```
Es werden beide echo Befehle einzeln ausgeführt, obwohl sie in einer Zeile stehen.

Mit dem nachfolgenden start Befehl, startet sich das Script selbst neu:
%~dpnx0 setzt hierbei die Beschreibung auf den Scriptnamen inclusive Pfad und Laufwerksbuchstaben. Es wird die Variable %0 mit diesen Kommandos entsprechend erweitert. Die Erklärung der einzelnen Kommandos ist in der Hilfe des for Befehls enthalten (help for). In der Variable %0 steht in einem Batch Skript immer der eigene Name.  

%0 ist das Skript selbst und
%* sind alle Parameter die beim ersten Skriptaufruf angeben wurden.

Ich weiß es ist ne unbefriedigende Antwort, aber du kannst ja den Fragen, der diese Codezeile geschrieben hat.

Seine Webseite: http://www.commandlinde.co.uk

Falls du da ne Antwort bekommst, dann würde es mich auch interessieren.


----------



## chrysler (26. Februar 2008)

Das hat mir schon weitergeholfen. Ich werde mich auf der Homepage noch umsehen.
Mich interessiert auch die Syntax. Die zwei Pipe Zeichen sind also eine Oder-Anweisung?!
Und die Ausrufezeichen verstehe ich noch nicht. Ist das auch eine abgekürzte Syntax wie %Var% +=1 ?


----------



## olqs (26. Februar 2008)

Normalerweise ist != (ungleich) das Gegenteil von == (gleich).
Hier heisst aber "set !=" einfach: Lösche die Variable mit Namen "!"

Ich hab jetzt selbst mal gegoogelt und eine Erklärung der Zeile gefunden:
http://www.administrator.de/Batch_minimized_command_line._Compact_syntax.html

Das ! hat mich auch verwirrt, da ich den Operator != in Vergleichen oft benutze habe ich nicht an ne Variable mit Namen "!" gedacht.


----------



## chrysler (26. Februar 2008)

Das ! ist ein Operator? Wo kann man ihn einsetzen? Gibt es über die verschiedenen Operatoren und ihre Verwendung auch eine Referenz?


----------



## olqs (27. Februar 2008)

Das ! ist in vielen Programmiersprachen eine logische Verneinung des nachfolgenden Ausdrucks.

In Batch Skripten jedoch wird bei ner IF Abfrage z.B. mit NOT verneint. Es war nur eine falsche Verallgemeinerung meinerseits.

In Vbscript ist der ungleich Operator z.B. auch nicht != sondern <>. Microsoft kocht hierbei sein eigenes Süppchen.


----------

