Windows 2003 Shell Scripting

Scripts zur System- und Dateiverwaltung

GetWord - Wörter finden

Mithilfe einer for-Schleife wird Zeile für Zeile der Datei gelesen. Durch die Angabe der Option tokens=%3 erhalten wir aber immer nur das Wort aus der Zeile, das dem Wort an der gesuchten Position (der Parameter Nummer drei) entspricht. Für jede Zeile wird die Ausführung an die Sprungmarke :procline übergeben. Der Wert für die gesuchte Zeile (der Parameter Nummer zwei, %2) und der tatsächliche Inhalt der Zeile (%%f) werden als Parameter übergeben.

An der Sprungmarke wird zuerst eine Umgebungsvariable (line) um eins erhöht und dann in einer if-Abfrage mit der gesuchten Zeilennummer verglichen. Bei Übereinstimmung wird die Zeile (die nur das gesuchte Wort enthält) ausgegeben.

Sollten die Wörter in Ihren Eingabedateien nicht durch Leerzeichen getrennt werden, können Sie der for-Schleife die Option delims hinzufügen (wie im Kommentar beschrieben) und dort eine Liste mit anderen Trennzeichen vereinbaren.

Parameter

  • %1 = Dateiname

  • %2 = Zeilennummer

  • %3 = Wortnummer

Code

@echo off
:: select token from input file

set line=0
if x%1 == x goto usage
if not exist %1 goto nofile

:: add the delims= option between the quotes, if your
input is not
:: separated by white space, e.g. for /F "tokens=%3
delims=;" ....
for /F "tokens=%3 usebackq" %%f in (%1) do call
:procline %2 %%f
set line=
goto eof

:procline
set /a line="%line%+1"
if %1 == %line% echo %2
goto eof

:usage
echo %0 - extract a word from a text input file
echo Copyright (c) 2003 by Armin Hanisch
echo.
echo Usage: %0 [filename] [line#] [word#]
echo.
echo Words in input file are separated by white space.
echo If you need different delimiters, check the code
for help.
echo.
goto eof

:nofile
echo Could not find input file %1 - terminating.
goto eof

:eof