# bat und cmd - Ich weiss, wie es geht



## Shinigami-sama (31. Mai 2011)

Hallo alle zusammen,
erstmal möchte ich mich vorstellen, mein Name ist Mike. Alle nennen mich einfach nur Shinigami (jap. für Todesgott).
Ich quatsche viel und gerne, also bitte keine Kontaktscheu, denn ich verbiete jedem, "Sie" zu mir zu sagen ;-) 
Nun, zum Thema:
Ich habe gerade ein Projekt mit java und batch. Solange ich tüftel, will ich tutorials eurer wahl machen   .  So regen sich mehr ideen in meinem kopf und ich möchte dieses Programm dann offentlich stellen ^^ Also bitte fragt mich, ich antworte so gut ich kann und hoffe, dass alle parteien vorteile Erzielen! Auf ein gutes gelingen und ein Danke an die, die verstehen, dass ich nicht 100% weiss, immerhin bin ich erst 16 :-D

Also ich denke, dass ich jedes gewünschte Tutorial in diesen Main-Beitrag einfüge, also hier immer auf neue tuts achten!
----------------------------------------------
Tutorial #1 - BATCH-Basis
01.06.2011
Hallo, wilkommen in dem Basic Tutorial für batch-Scripts!
Ich erleutere euch alle grundlegenden Begehle!
Bevor wir anfangen, einen tipp: es ist bei den Befehlen egal, ob ihr sie GROSS oder klein schreibt. Aber wenn ihr keinen Editor benutzt, der eure Befehle farbig markiert, solltet ihr sie gross schreiben.
Ein Editor, der farbig markiert, ist Notepad++. Hier könt ihr ihn downloaden (SEHR ZU EMPFEHLEN).
Also kommen wir zum "ersten" und einfachsten Befehl: exit.
Ich denke, alle wissen, was es macht, den Script beenden.
Eigentlich überflùssig, denn batchdateien schliessen automatisch am Scriptende. Wofür man ihn also braucht, erkläre ich später.
Nun kommen wir zum zweiten Befehl: @echo.
Ein Beidpiel:
   Code:
   01. |     @echo on
   02. |     exit

Ein schwarzer Bildschirm entsteht, gibt folgendes aus:


> [momentanes Verzeichnis]>exit


Und schließt sich.
Hierbei:
   Code:
   01. |     @echo off
   02. |     exit

Der Bildschirm öffnet sich und verschwindet sofort.
Was also macht @echo ?
Antwort: @echo gibt mithilfe der Nachzeile on/off an, ob die Befehle mit ausgegeben (angezeigt) werden, oder nicht.
Als nächszes kommt ein Befehl, den man häufig am Anfang benutzt, mit der Zeit aber nicht mehr: pause.
Dieser Befehl sagt wie exit von alleie aus, was er macht.
Aber um eventuelle Missverständnisse zu vermeiden, ein Beispiel:
   Code:
   01. |     @echo off
   02. |     pause
   03. |     exit

Das gibt aus:


> Drücke eine beliebige Taste . . .


Also haben wir die drei grundlegenden Befehle nun durch. Fangen wir mit üblichen Befehlen an.
Am häufigsten, denke ich mal, wird der Befehl echo genutzt.
Echo bewirkt, dass ein festgelegter Text angezeigt wird.
Am besten auch mal ein Beispiel:
   Code:
   01. |     @echo off
   02. |     echo Dieses Programm wird nach bestaetigen einer Taste
   03. |     echo schliessen.
   04. |     pause
   05. |     exit

Ausgabe:


> Dieses Programm wird nach bestaetigen einer Taste
> schliessen.
> Drücke eine beliebige Taste . . .


Nun können wir Ausgaben erzeugen, aber das bringt uns im moment eigentlich nichts, ausser ein bisschen experimentierfreude !
Der nächste Befehl, ein wichtiger Befehl schlecht hin, was das Programm zum Programm macht!
Es ist der Befehl set.
Der komplette Computer läuft über Variablen und binären Zahlen. Mit "set" können wir eine Variable, ähnlich der Variable des PC's, deklarieren. Auf deutsch: Einer Variable einen Wert zuordnen.
Dies lässt sich leicht mit Mathe erklären, also werde ich ein Mathebeispiel zeigen:
Folgende Gleichung: y=mx+b; Das ist die immer beliebte Lineare Gleichung. ihr kennt das meist so:
y=mx+b; gegeben: m=3; b=1; Stelle x=7; gesucht: Wert y=?
Da setzt man die gegebenen "Variablen" ein und kann so y berechnen. 
Was hat das jetzt mit Batch-Dateien zu tun?
Folgendes:
   Code:
   01. |     @echo off
   02. |     echo Formel: y=mx+b
   03. |     set m=3
   04. |     echo Variable m=3
   05. |     set b=1
   06. |     echo Variable b=1
   07. |     set x=7
   08. |     echo Stelle x=7
   09. |     set /A y=%m%*%x%+%b%
  10. |     echo Variablen einsetzen: y=3*(7)+1
  11. |     echo Gesuchter Wert y=%y%
  12. |     pause
  13. |     exit

Ausgabe:


> Formel: y=mx+b
> Variable m=3
> Variable b=1
> Stelle x=7
> ...



Erklärungen:
Fangen wir mit Zeile 3. an: set m=3 ;
Der Befehl set sagt, jetzt wird eine Variable deklariert.
'm' ist die Variable, die zu deklarieren ist (sie kann durch alles ersetzt werden...)
'=' bedeutet, dass die Deklarierung eine "Gleichstellung" ist, also die Variable gleich der Deklarierung entspricht.
'3' ist die Deklaration, wir setzen den Wert 3, also wird hier durch set m=3
wie in der Mathematik der Wert 3 der Variable zugeordnet.
Das passiert auch in den nächsten Zeilen
Jetzt wird es aber interresant:
   09. |     set /A y=%m%*%x%+%b%
set kennen wir, die Formelgleichung sehen wir ja, ich denke, da ist keine Erleuterung notwendig. Aber was ist mit dem /A? Nun, es ist nichts weiter als eine Nachzeile, wie bei @echo off das off, nur bedeutet es hier: Jetzt wird eine Variable durch Berechnung deklariert. Also, ich werde auch weiteres erklären zum Befehl set, aber momentan gibt es noch andere Befehle.
Die Buchstaben mit den %-Klammern sind nichts weiter, als die Variablen, die durch die Variable, die zwischen dieser %-Klammer steht, ersetzt werden.
Ein Befehl, den JEDER Anfänger benutzen sollte ist der rem-Befehl.
Was der wohl bringt?
Nichts! Und GENAU DA liegt der Vorteil dieses Befehls. So könnt ihr Kommentare hinter all euren Befehlen und Ausführungen machen. Kürzer und sinnvoller ist jedoch der Befehl :: (also Doppelter Dopelpunkt). Die Wirkung ist gleich, ist aber schneller zu Schreiben und es können alle Zeichen verwendet werden, ohne ausversehen doch einen anderen Befehl zu aktivieren.
Also, als Beispiel nehmen wir den vorherigen Code für den Befehl set:
   Code:
  01. |     @echo off 
  02. |     :: Befehle werden nicht ausgegeben, außer Fehlermeldungen und echo-Befehle!
  03. |     echo Formel: y=mx+b 
  04. |     :: Die reguläre Lineare Gleichung wird angegeben
  05. |     set m=3 
  06. |     :: Wir geben der Variable den Wert
  07. |     echo Variable m=3 Ausgabe des Variablenwertes
  08. |     set b=1
  09. |     :: Wir geben der Variable den Wert
  10. |     echo Variable b=1 
  11. |     Ausgabe des Variablenwertes
  12. |     set x=7 
  13. |     :: Wir geben der Variable den Wert
  14. |     echo Stelle x=7
  15. |     Ausgabe des Variablenwertes
  16. |     set /A y=%m%*%x%+%b% 
  17. |     :: Die berechnung wird dem Wert zugeordnet
  18. |     echo Variablen einsetzen: y=3*(7)+1
  19. |     :: Ausgabe der Aktion
  20. |     echo Gesuchter Wert y=%y% 
  21. |     :: Ausgabe des berechneten Variablenwertes
  22. |     pause 
  23. |     :: Hier ist eine Pause
  24. |     exit 
  25. |     :: Programm schliesst sich

Ausgabe:


> Formel: y=mx+b
> Variable m=3
> Variable b=1
> Stelle x=7
> ...


Wie man sieht, wird der Kommentar nicht ausgegeben, also sollten Anfänger ihre Projekte und Versuchsdateien IMMER kommentieren. Wollt ihr den Kommentar aber direkt hinter dem Befehl haben, müsst ihr den Befehl rem benutzen. macht ihn aber immer in der nachfolgenden Zeile mit dem :: ! es schadet nie, die einfache Variante zu wählen...
----------------------------------------------
Tutorial #2 - BATCH-Bedingungen
Hallo, Lieser-Kuhais. Die Basisbefehle habe ich schon mal Deutlich gemacht, was ihr natürlich im oberen Tutorial ddurchlesen könnt . Kommen wir aber mal zu einer Sache, die auch neben dem echo-Befehl sehr häufig gebraucht wird.
Wir WOLLEN und MÜSSEN *Bedingungen* aufstellen. das machen wir mit dem Befehl if. Dieser Befehl ist sehr simpel, aber von großer Wichtigkeit!
Es gibt 3 verschiedene If-Befehle:
if errorlevel;
if Zeichenfolge1==Zeichenfolge2;
if exist;
Der Befehl if hat auch noch 2 "Erweiterungen". Zum einen die not-Angabe und der else-Befehl.
Die not-Angabe entspricht etwa dem != oder auch bekannt als "ungleich" in den anderen Programmier- und Scriptsprachen. Also gibt man es folgendermaßen ein: Wenn die Zeile so aussieht:
   01 |     if errorlevel 1 goto eof
schreiben wir das als ungleich so:
   01 |     if not errorlevel 1 goto eof
goto eof bedeutet: gehe zu EndOfFile
........
Bearbeitung läuft...
----------------------------------------------

...........
[tutorial wird noch erweitert, bitte habt etwas Gedult]


----------



## sheel (1. Juni 2011)

Hallo und Willkommen bei tutorials.de 

Respekt, gerade erst angemeldet und statt (manchmal dämlichen) Fragen ein Tutorialsangebot...
kann mich nicht erinnern, das schon mal gesehen zu haben .

Wenn mir ein Thema einfällt, werd ichs dich wissen lassen...

Und keine Angst, keiner hier weiss 100%.
Und im Forum gibts durchwegs einen guten Umgangston, wird dich also keiner deswegen runtermachen.

Ein Tipp zum Code posten:
Wenn du ihn zwischen [code=java]...[/code] schreibst, wird passend für Javacode formatiert angezeigt, mit Zeilennummern, Highlighting etc... und um einiges besser lesbar als ohne, vor allem bei viel Code.
Wie das ausschaut, findest du im Javabereich genug Beispiele, falls du dir anschauen willst.

Für Batch gibts (glaub ich) kein batch-Tag, dafür aber ein generelles [code]...[/code].
Das farbige Highlighting fehlt, da es sonst jeweils speziell auf die Sprache angepasst ist, aber sonst...
Bei Batch fällt mir sowieso nichts zum Einfärben ein.

Noch was: Viele User, auch die Mods/Admins, achten ziemlich auf Einhaltung der deutschen Groß-/Kleinschreibung.
Manchmal ein Patzer ist nicht schlimm, aber nicht alles durchgehend klein schreiben.

Dann gutes Gelingen mit deinem Programm und den Tutorials, sensei


----------



## Shinigami-sama (1. Juni 2011)

Alo zum einen möchte ich mich für den Lob und die Tipps bedanken.
Zum anderen möchte ich mich für Fehler entschuldigen, diese passieren mir manchmal, weil ich manchmal mit meinem kleinen touch-handy schreibe, wie die Themenbeschriebung. Ich kann sie und meije künftigen Beiträge bearbeiten, wenn ihr wollt. 
Zudem bin ich begeistert, wie man sich hier artikuliert und auch, dass man so empfangen wird.
Zum Abschluss: Nenn mich bitte nicht Sensei, ich fühle mich zwar geehrt, aber ich gebe dir noch keinen Unterricht ^^. Der Sensei ist Der Webmaster dieses Forums und ich bin nur Shinigami-sensei für die, denen ich helfe und unterrichte. So, jetzt kannst du mich mit Sensei ansprechen, weil ich dich in sache Nachsilbe unterrichte xD

PS Wenn jemand Animes gerne guckt, nehmt pls per PN kontakt mit mir auf


----------



## toon-link (1. Juni 2011)

Hallo
meiner Meinung nach ist das ein gut gelungenes Tutorial.

Kann man gut lesen würd mich auf mehr freuen


----------



## Shinigami-sama (1. Juni 2011)

danke. Noch was an alle anderen Leser, bitte gebt eine Kritik ab, ich will dieses Tutorial gut und verständlich aufbauen, und das geht am besten, indem man Kritik bekommt und annimmt. Also helft mir, gute Batcher aus euch zu machen... Vielen Dank
mfg Euer Shinigami-Sensei ^^


----------



## sheel (1. Juni 2011)

Stand der Bearbeitung 1.6.2011 23:34:
Find ich sehr gut 

Versteht man sofort.
Bin zwar schon länger mit Batch unterwegs, ist aber (aus meiner Sicht) auch für Anfänger verständlich.

Was man vielleicht bei weiteren Teile anders machen könnte:
Ein bisschen mehr Textgliederung.
Dort und da Leerzeilen, eventuell fett/kursiv formatierte Überschriften...

Alles in allem sehr gut gelungen


----------



## deepthroat (6. Juni 2011)

Hi.

Für das erste Tutorial gefällt es mir gut, obwohl ich es jetzt nur ganz kurz überflogen habe.

Allerdings wäre es nicht tutorials.de wenn es hier nicht auch einen Tutorials-Bereich geben würde. Es wäre evtl. eine gute Idee dein Tutorial (wenn etwas hübscher formatiert wie sheel schon ansprach) hier einzureichen: http://www.tutorials.de/tutorials-a...tung-zur-veroeffentlichung-von-tutorials.html

Zur fachlichen Seite: wenn du :: als Abkürzung für REM empfiehlst, solltest du evtl. auch auf die Probleme hinweisen. Siehe z.B. http://www.robvanderwoude.com/comments.php

Gruß


----------



## Shinigami-sama (7. Juni 2011)

Zum einen will ich mich für die ganze positive und negative Kritik bedanken, zum anderen für meine Antwortzeit entschuldigen. Wie erwähnt gibt es noch Internetprobleme. Befor das hier in den Tutorialbereich eingefügt wird, würde ich es noch gerne erweitern. Das ich den Code-HTMLCode nicht genutzt habe, war geplant. Denn so konnte ich alles farbig markieren, um Befehle, wie sie in Notepad++ angzeigt werden, zu verdeutlichen. Ausserdem kann man so den Code nicht einfach kopieren. Das hat zur Folge, dasa die Codes selbst aufgeschrieben werden. Das verinnerlicht und bietet eine gute Grundlage: Nur durch kopieren und imitieren lernt man nichts! Auf jeden Fall werde ich an diesem Tutorial arbeiten, um ihn für jeden noch so dummen zu einem Erfolg zu bringen.

Mfg
Shinigami


----------



## Spyke (9. Juni 2011)

Ich würde @echo und exit eher zum schluss oder so erwähnen.
Als Anfänger kommt es denke ich schlecht rüber wenn man mit Anweisungen anfängt die man so direkt als erstes erstmal nicht braucht.

Was mich ebenfalls verwirrte war das nach den Variablen (bei dennen mir ehrlich gesagt noch eine genauere Definition fehlt) plötzlich REM angesprochen wird.
Ich weiß nicht wie ichs sagen soll, das kam mir irgendwie zu plötzlich eben sind wir noch bei Formeln und dann plötzlich ein katt und es werden Kommentare beschrieben.

Ich hab das ganze jetzt versucht aus sicht eines Anfängers zu sehen.
Da fängst du dann schonmal richtig an mit einer Bildschirmausgabe.
Wenn man erstmal was auf dem Bildschirm sieht ist man immer stolz auf sich.
Als nächstes hätte ich mich aber erstmal an einer Variable aufgehalten, deren Eingabe und Ausgabe (so hätte man denke ich auch besser % erklären können) und danach das ganze in eine Formel gepackt.


P.S.: Hab nicht alles gelesen.


----------



## Shinigami-sama (12. Juni 2011)

Stimmt, Spyke, danke für den Hinweis. Ich werde natürlich die Erklärung der %-Klammern erweitern und das mit dem Kommentar-Befehl deutlicher abgrenzen . Genau wegen sowas ist dieses Tutorial auch noch nicht im Tutorials-Bereich!


----------



## javaDeveloper2011 (28. Juni 2011)

*Dateityp Icon zuweisen*

Hallo Shinigami-sama,

ich möchte gerne ein Batch-Script schreiben, dass .ico-Dateien für bestimmte Dateitypen als Icon im Windows-Explorer setzt.

Es muss Batch sein, soll aber ein Ergebnis wie das Programm Types liefern.

Ich hab schon viel gegoogelt und herausgefunden dass es wohl irgendwie mit .reg-Dateien die die entsprechenden Registry-Einträge enthalten funktioniert.

Wie heißt jetzt aber der passende Eintrag?
(Grundsätzlich würden mich auch die Einträge für...
...bei Doppelklick auf Datei zu startendes Programm
...Beschreibung des Dateityps (also z.B. Textdatei statt TXT-Datei) 
interessieren.

Falls irgendwie möglich sollen keine Administrator-Rechte erforderlich sein.

Freue mich auf deine Antwort,
javaDeveloper2011


----------



## deepthroat (29. Juni 2011)

Hi.





javaDeveloper2011 hat gesagt.:


> Hallo Shinigami-sama,
> 
> ich möchte gerne ein Batch-Script schreiben, dass .ico-Dateien für bestimmte Dateitypen als Icon im Windows-Explorer setzt.


Warum erstellst du nicht ein eigenes Thema dafür und kaperst hier den Thread?


javaDeveloper2011 hat gesagt.:


> Ich hab schon viel gegoogelt und herausgefunden dass es wohl irgendwie mit .reg-Dateien die die entsprechenden Registry-Einträge enthalten funktioniert.
> 
> Wie heißt jetzt aber der passende Eintrag?
> (Grundsätzlich würden mich auch die Einträge für...
> ...


Schau mal im RegistryEditor unterhalb von HKLM\Software\Classes bzw. HKCU\Software\Classes nach dem Standardwert des Schlüssels ".ext" (wobei ext die Dateiendung der Dateien ist die du anpassen willst).

Dann schaust du unterhalb von  HKLM\Software\Classes\<name> bzw. HKCU\Software\Classes\<name> (je nachdem was in .ext drin stand) nach dem Standardwert (das ist die Beschreibung des Dateityps), DefaultIcon legt das Standardicon fest und shell\open\command legt die Aktion für das Öffnen der Datei fest.

Beispiel:

Befehl:

```
reg query hklm\software\classes\.ppk /ve
```
Ausgabe:
	
	
	



```
HKEY_LOCAL_MACHINE\software\classes\.ppk
    (Default)    REG_SZ    PuTTYPrivateKey
```
Für .ppk Dateien lautet der passende Unterschlüssel also _PuTTYPrivateKey_

Befehl:

```
reg query hklm\software\classes\PuTTYPrivateKey /s
```
Ausgabe:

```
HKEY_LOCAL_MACHINE\software\classes\PuTTYPrivateKey
    (Default)    REG_SZ    PuTTY Private Key File

HKEY_LOCAL_MACHINE\software\classes\PuTTYPrivateKey\DefaultIcon
    (Default)    REG_SZ    C:\Program Files (x86)\PuTTY\pageant.exe,0

HKEY_LOCAL_MACHINE\software\classes\PuTTYPrivateKey\shell

HKEY_LOCAL_MACHINE\software\classes\PuTTYPrivateKey\shell\open

HKEY_LOCAL_MACHINE\software\classes\PuTTYPrivateKey\shell\open\command
    (Default)    REG_SZ    "C:\Program Files (x86)\PuTTY\pageant.exe" "%1"
```
Siehe "reg /?".

Exportiere einfach aus dem Registry Editor einen der Unterschlüssel von HKLM\Software\Classes bzw. HKCU\... und schau dir die .reg Datei an.

Gruß


----------



## javaDeveloper2011 (29. Juni 2011)

Hallo deepthroat,



> Warum erstellst du nicht ein eigenes Thema dafür und kaperst hier den Thread?


Wie ich das versanden habe, ist dieser Thread dazu gedacht fragen zu Batch zu stellen.

Ich wollte mit dieser Zeile:

```
reg add hklm\software\classes\txtfile /v DefaultIcon /t REG_SZ /d C:\Users\Nik\Desktop\Medien\Images\ICO\Brush_win7.ico /f
```
Eine .ico-Datei als Standart-Icon für TXT-Dateien setzen.

Eine  Fehlermeldung erscheint nicht und in der Exportierten .reg-Datei ist mein Pfad auch als DefaulIcon erwähnt.

Aber selbst nach einen Neustart ist das Icon im Windows-Explorer noch das alte!

Was mache ich falsch?

javaDeveloper2011


----------



## deepthroat (29. Juni 2011)

javaDeveloper2011 hat gesagt.:


> Wie ich das versanden habe, ist dieser Thread dazu gedacht fragen zu Batch zu stellen.


Du hast keine Batch Frage gestellt. Bei dir geht es vordergründig um die Registry und den Explorer. Ich kann jedenfalls nichts Batch spezifisches an deiner Frage erkennen.

Und glaubst du wirklich es ist eine gute Idee alle Fragen in einen einzelnen Thread zu kloppen? ;-] Wozu gibt es eigentlich die Foren? Vielleicht reicht da auch ein Mega-Thread? 

Evtl. könnte ein Mod das Thema hier mal auftrennen?! Danke.


javaDeveloper2011 hat gesagt.:


> Ich wollte mit dieser Zeile:
> 
> ```
> reg add hklm\software\classes\txtfile /v DefaultIcon /t REG_SZ /d C:\Users\Nik\Desktop\Medien\Images\ICO\Brush_win7.ico /f
> ...


Wie ist der %errorlevel%?


javaDeveloper2011 hat gesagt.:


> Aber selbst nach einen Neustart ist das Icon im Windows-Explorer noch das alte!
> 
> Was mache ich falsch?


Du hast einen Wert namens "DefaultIcon" zum txtfile Schlüssel hinzugefügt. Du mußt stattdessen den Standardwert des "txtfile\DefaultIcon" _Schlüssels_ setzen.

Du mußt danach den Explorer neu starten da die Icons gecached werden (oder neu booten).

Gruß


----------



## javaDeveloper2011 (29. Juni 2011)

Hi,



> Du mußt stattdessen den Standardwert des "txtfile\DefaultIcon" Schlüssels setzen.



Wie geht das jetzt aber, ich hab schließlich schon alles was mir eingefallen ist durchprobiert und alles von reg /? durchgelesen!

javaDeveloper2011


----------



## deepthroat (29. Juni 2011)

javaDeveloper2011 hat gesagt.:


> Wie geht das jetzt aber, ich hab schließlich schon alles was mir eingefallen ist durchprobiert und alles von reg /? durchgelesen!


Mit /ve.

Gruß


----------



## javaDeveloper2011 (29. Juni 2011)

Hi,

sorry, dass ich mich so blöd anstelle aber ich kriege es einfach nicht hin.
Wie lautet denn nun der exakte komplette Befehl?

javaDeveloper2011


----------



## deepthroat (29. Juni 2011)

javaDeveloper2011 hat gesagt.:


> Hi,
> 
> sorry, dass ich mich so blöd anstelle aber ich kriege es einfach nicht hin.
> Wie lautet denn nun der exakte komplette Befehl?




```
reg add ...\txtfile\DefaultIcon /ve /f /d pfad_zur_ico_datei
```
Gruß


----------



## poljew (15. August 2011)

Hallo Shinigami-sama,
ich bin neu hier, darum entschuldige ich mich direkt, wenn ich meine Frage an der falschen Stelle stelle.
Ich versuche gerade eine Batch Datei zu erstellen, die aus einem Ordner in einen anderen eine Datei kopiert:

echo %jahr%-%monat%-%tag%

copy \\srv55\Test\Daten\%jahr%-%monat%-%tag%\Test1--123654\Result.txt  C:\Temp\Result.xml

Wenn ich es so schreibe wie oben, geht alles, allerdings wird der Ordner Test1 immer neu erstell, das heisst, ich weiss das der Ordner Test1 heisst, der Rest ist variabel.
Z.B. Es gibt dann mehrere Ordner die so heißen können: 
Test1--123654
Test1--567890
Test1--187689 u.s.w
Wie kann ich das Problem umgehen?

Vielen Dank


----------

