Per Batch einen Satz in Wörter trennen?

... komplette Frage anzeigen

2 Antworten

Das geht mit Hilfe des SHIFT-Befehls:

@echo off
Setlocal EnableDelayedExpansion
set Satz=Das hier ist ein Satz. Oder auch zwei.
call :Function_SeparateWords %Satz%

echo %Satz%
echo ----------------------------------
FOR /L %%A IN (1,1,%Counter%) DO echo !Word%%A!
echo ----------------------------------
echo %Satz% = %Counter%
pause
exit

:Function_SeparateWords [%* = Satz]
if "%~1" == "" exit /b
set /a Counter+=1
set Word%Counter%=%1
shift /1
goto Function_SeparateWords

SETLOCAL erlaubt, Variablen auch mit ! statt mit % aufzurufen, wodurch man eine Variable in einer Variable benutzen kann (!Word%%A!).

Der CALL-Befehl ruft die am Ende des Codes geschriebene Funktion auf mit den Parametern, die in der Variable %Satz% gespeichert sind. Die Parameter sind dann mit %1, %2, %3 usw. aufrufbar. Da das Programm nicht weiß, wie viele Parameter es geben wird, kommt der SHIFT-Befehl dazu:

"SHIFT /1" verschiebt den Inhalt von %2 auf %1, von %3 auf %2 usw., also alles eins nach vorne. So kann das Programm zählen, wie viele Parameter es gibt, nämlich so viele, bis %1 keinen Inhalt mehr hat.

Das überprüft der IF-Befehl, der die Funktion beendet, wenn alle Parameter gespeichert sind.

Der SET/A-Befehl zählt die Wörter.
Der SET-Befehl speichert die Wörter.

Wird die Funktion geschlossen (EXIT /B), springt das Programm zurück zu dem CALL-Befehl und fährt mit den darunter stehenden Befehlen fort.

Der FOR/L-Befehl zählt von 1 hoch bis %Counter% und gibt mit Hilfe von ECHO jedes Wort einzeln aus.

Achtung: Stehen mehrere Wörter in Anführungszeichen, behandelt CMD sie als einen einzigen Parameter. Setzt du z. B. den zweiten Satz "Oder auch zwei." in Anführungszeichen, zählt CMD nur noch 6 statt 8 Wörter.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von timlg07
26.03.2017, 14:22

Da sag noch mal jemand Batch kann nichts ^^ der shift befehl ist sehr interessant, kannte ich noch nicht.

0

Hallo!

Theoretisch ist es sicherlich umsetzbar -- praktisch eher nicht (ich denke da an cmd -- Linux ist es ohne Probleme realisierabar).

Also die cmd-Befehle/Funktionen gibt es -- es gibt aber Spagetthi-Code der schon beim entwickeln nach einiger Zeit nicht mehr lesbar ist, und du dich in den GOTOs und :labels verirrst.

Die Syntax der Schleifen tut sein übriges -- probiere es lieber mit einer richtigen Programmiersprache.

Gruß

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von N0chFr4gen
11.05.2016, 07:57

Klar könnte ich es in Java oder C++ versuchen, die ich recht gut drauf habe. Aber ich wollte es in Batch machen da das eine "größere" Herausforderung ist.

0

Was möchtest Du wissen?