@echo off
FOR /F %%i in (numbers.txt) do (
echo %%i
)
pause
Gibt jede Zeile einzeln aus
@echo off
set zeile=
for /f "usebackq skip=4 delims=" %%i in ("numbers.txt") do (
if not defined zeile set "zeile=%%i"
)
echo %zeile%
pause
"usebackq skip=4
Übergeht die ersten 4 Zeilen und gibt Zeile 5 in Variable %zeile
delims="
ohne Trennzeichen
@echo off
set LineNo=3
set "line="
set /a LineNo-=1
for /f %%a in ('more/e +%LineNo% ^< numbers.txt') do (
if not defined line set "line=%%a"
)
echo %line%
pause
Die auszulesende Zeilennummer
Leerzuweisung Variable line
Minus 1 da Zeile mit 0 beginnt
for /f %%a -> Forschleife mit counter a
('more/e +%LineNo% ^< numbers.txt') -> Aktiviert die erweiterten Möglichkeiten, geht bis zur Zeile 'LineNo'
do (
if not defined line set "line=%%a")
do-if Kombination Schleife, die 'line' mit dem Wert der gesuchten Zeile befüllt wird.
ACHTUNG:
Batch ist ein 32 Bit System. Daher kann es nur maximal 31 mit Delimeter (z.B. ;) getrennten Werte einlesen (Einer wird wohl für was anders gebraucht). Die länge der Werte (Zeichenkette ist aber egal). Ist es notwendig pro Zeile mehr als 31 Werte (~Spalten) einzulesen, muss man pro angefangene 31 Werte eine neue Datei anlegen und die Dateien nacheinander einzulesen. mit einer FOR-Schleife einzulesen (also am besten Dateinamen logisch nummerieren: txt_1.dat, txt_2.dat, txt_n.dat...).
@echo off
set LineNo=1
set ColNo=4
set "line="
set /a LineNo-=1
for /f "delims=; tokens=%ColNo%" %%a in ('more/e +%LineNo% ^< strtest.txt') do (
if not defined line set "line=%%a"
)
echo %line%
pause
Die auszulesende Zeilennummer
Die 4. 'Spalte
Leerzuweisung Variable line
Minus 1 da Zeile mit 0 beginnt
"delims=; Semikolon als Trennzeichen
tokens=%ColNo%" Spaltennummer
Rest: vgl. Lösungsweg 3
Datei: S_Create.bat (Ausführen)
@echo off
:RASSE
cls
FOR /f "delims=" %%i in (Data\s_rassen.dat) do (
echo %%i
)
set "Rasse="
Echo Deine Wahl:
set /P eingabe=
pause
IF '%eingabe%' == '1' set "Rasse=Elf"
IF '%eingabe%' == '2' set "Rasse=Mensch"
IF '%eingabe%' == '3' set "Rasse=Ork"
IF '%eingabe%' == '4' set "Rasse=Zwerg"
IF '%eingabe%' GTR '4' (
echo falsche Eingabe
pause
goto RASSE
)
IF '%eingabe%' LSS '1' (
echo falsche Eingabe
pause
goto RASSE
)
cls
REM *** Suche Startboni der Rasse ***
set DatName=Data\StartBoni.dat
set ColNo=2
set Suchwert=%Rasse%
Call fkt_FndL.bat %DatName% %ColNo% %Suchwert%
set AktCol=1
set "Wert=1"
Set prefix=Wert
:NewCol
for /F "delims=; tokens=%AktCol%" %%i in ("%Line%") do (
set "Wert=%%i"
Call :ReadCols %Wert% %AktCol% %prefix%
goto :NewCol
)
goto :Ende
:ReadCols
set %prefix%_%AktCol%=%Wert%
echo %Wert_1%
echo %Wert_2%
echo %Wert_3%
echo %Wert_4%
echo %Wert_5%
pause
set /a AktCol += 1
:EOF %AktCol%
:Ende
Datei fkt_FndL.bat
@echo off
set LineNo=0
set cnt=0
set "line="
for /f "delims=; tokens=%ColNo%" %%a in ('more/e +%LineNo% ^< %DatName%') do (
If not "%%a"=="%Suchwert%" Call :Counter %cnt%
If "%%a"=="%Suchwert%" goto :LineFoun %cnt%
)
:Counter
cls
set /a cnt += 1
goto :EOF
:LineFoun
for /f %%a in ('more/e +%cnt% ^< %DatName%') do (
set "line=%%a"
goto :Ende %Line%
)
:Ende
:EOF %Line%
Vergleiche: Herunterladen
Datei im Unterordner Data\
gib alle Zeilen am Bildschirm aus
Auswahleingabe
Speichern als Variable 1 - 4
Prüfen der Eingabe (ODER) siehe IF
Vordefinition der Variablen
Setze Dateinamen
Setze zu durchsuchende Spaltennummer
Setze Suchwert
Rufe fkt_FndL.bat mit
Rückgabe: (erste) Zeile in deren Spalte der Suchwert ist.
Setze Spalte mit der zu beginnen ist
Dimensioniere Variable Wert
Präfix der Späteren Variablennamen (Bei mehreren)
Beginn Forschleife
Trennzeichen=; Spalte =AktCol, Line=Rückgabewert(s.o.)
Wert = Wert der akt. Spalte
Rufe Sub mit Übergabewerten auf
Zurück zu For
gehe dorthin wo es nach dem Einlesen weitergehen soll
Bastele den Variablen Variablennamen zusammen und weise ihm den akt. Spaltenwert zu
Testausgabe...
Zähler AktCol +1
uns zurück um Call
Diese Bat wird als Funktion missbraucht und von oben aufgerufen.
Vordefinition....
Lies die zu durchsuchende Spalte der Zeilen nacheinander ein (vgl. Lösungsweg 3)
Wenn nicht der gesuchte Wert zähle Counter außerhalb der Prozedur hoch. Wenn doch gehe zu LineFoun
Subprozedur um Counter hochzuzählen
Gib die gesuchte Zeile in %Line%...
...und kehre zum Aufruf in der ausgangs-Bat zurück
verwandte Artikel: Zeichenketten zerlegen; more; for; do; If, Call