neuneu
Goto Top

Batch Datei soll aus Textdatei string auslesen

Hallo,

voll Freude habe ich diesen Link gefunden:
Batch Datei soll aus Textdatei string auslesen ("genaue Koordinatenangabe")

Das klappt auch bestens, wenn ich eine Textdatei explizit angebe.
Ich möchte es aber für viele solcher Dateien machen.
Daher habe ich eine For Schleife gebastelt und meine alles richtig gemacht zu haben,
aber ich kriege nie das Datum (das steht bei mir in Zeile 38 an Position 42) meiner
aktuellen Datei. Irgendwie hat die Variable immer noch das Datum der letzten Datei (17.07.2011).
Obwohl die Zeile set ln immer das richtige Datum der aktuellen Datei enthält, hat
%ln:~42,10% immer das falsche Datum:
for /f "delims=" %%i in ('dir /b') do (  
 
        echo %%i
	echo ln=%ln%


	for /f "delims=" %%j in ('findstr /n /v "akjgriarg" "%Pfad%"\%%i^|findstr "^38:"') do @Set "ln=%%j"   
	set ln 
	echo %ln:~42,10%

	echo bla
	echo %%i
	echo ln=%ln%
REM	set ln=
	
	echo %ln:~42,10%
	echo start
	echo Die Variable ln enthält "%ln%"  

	echo hier
)
Habe schon mit set ln= rumgespielt - hilft nix. Ich werd noch wahnsinnig!
Bin für jede Hilfe äußerst dankbar!

Gruß NeuNeu

Content-ID: 202446

Url: https://administrator.de/contentid/202446

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

bastla
bastla 27.02.2013 aktualisiert um 15:35:26 Uhr
Goto Top
Hallo NeuNeu!

Was willst Du denn genau erreichen? Grundsätzlich ist Dein Stichwort "delayedExpansion" - daher entweder ein Unterprogramm verwenden oder die "verzögerte Variablenerweiterung" aktivieren ...

Variante 1 sähe etwa so aus:
@echo off & setlocal
set "Pfad=D:\Dein Pfad"  

for /f "delims=" %%i in ('dir /b') do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
echo %1

for /f "delims=" %%j in ('findstr /n /v "akjgriarg" "%Pfad%\%~1"^|findstr "^38:"') do Set "ln=%%j"  
set ln
echo %ln:~42,10%

echo bla
echo %1
echo ln=%ln%
REM set ln=

echo %ln:~42,10%
echo start
echo Die Variable ln enthält "%ln%"  

echo hier
goto :eof
Grüße
bastla

P.S.: Findest Du nicht auch passend formatierten Code viel besser lesbar?
NeuNeu
NeuNeu 27.02.2013 um 13:16:17 Uhr
Goto Top
Hallo bastla,

ich möchte für jede Textdatei mein Datum (in Zeile 38, Position 42) ausgelesen haben um dieses
dann in eine Datei zu schreiben.
Aber mein echo %ln:~42,10% zeigt mir schon, dass da nicht das Datum der aktuellen Datei drin ist -
stattdessen das Datum der letzten Datei. Wenn man meinen code als .bat abspeichert und aufruft,
bekomme ich für echo %ln:~42,10% immer nur 17.07.2011 und das ist das Datum der letzten Datei in
meinem Verzeichnis.

Was soll diese "verzögerte Variablenerweiterung" bewirken?
Wenn ich Deine Variante einbaue kommt als Meldung:
"Das Sprungziel - ProcessFile wurde nicht gefunden."

Gruß NeuNeu
andimue
andimue 27.02.2013 um 15:25:38 Uhr
Goto Top
Hallo NeuNeu,

was meinst du mit

Zitat von @NeuNeu:
Wenn ich Deine Variante einbaue ...

Hast du gesamten Code von bastla 1:1 verwendet oder möglicherweise nur sein
for /f "delims=" %%i in ('dir /b') do call :ProcessFile "%%i"   

in deinen Code integriert ohne die Subroutine :ProcessFile mit zu übernehmen ?

Also bei mir läuft bastla's Code (natürlich) face-smile

Andi
NeuNeu
NeuNeu 27.02.2013 um 17:23:27 Uhr
Goto Top
Okay, ich hatte eine Zeile vergessen...
Nun geht es in der Tat, aber ich verstehe nicht, warum ich das jetzt mit dieser
"verzögerten Erweiterung" machen muss,bzw. was diese bewirkt.
Kann nicht verstehen, was an meinem code falsch ist.

Ich würde verstehen wenn Ihr keine Lust habt, mir das lang und breit zu erklären,
aber so ein kleiner Hinweis, warum es mit meinem code nicht klappt, wäre super!
Schliesslich will ich ja in der Zukunft alles besser machen.....

Jedenfalls besten Dank soweit!

Gruß NeuNeu
bastla
bastla 27.02.2013 aktualisiert um 19:54:58 Uhr
Goto Top
Hallo NeuNeu!
ich verstehe nicht, warum ich das jetzt mit dieser "verzögerten Erweiterung" machen muss
Hast Du denn bei Deiner Suche nach "delayedExpansion" noch nicht mal diesen Beitrag gefunden?

BTW: Mein Vorschlag verwendet die "verzögerte Erweiterung" nicht (was eigentlich aus meinem Kommentar oben aufgrund von
entweder ein Unterprogramm verwenden oder die "verzögerte Variablenerweiterung" aktivieren

Variante 1
hätte hervorgehen sollen) ...

Grüße
bastla
andimue
andimue 28.02.2013 um 07:50:49 Uhr
Goto Top
Hallo NeuNeu,

sehr hilf- und lehrreich ist auch dieser Artikel über das for-Kommando:
Tutorial zur FOR-Schleife
Darin wird das Prinzip der "delayedExpansion" sehr gut beschrieben.

Gruß
Andi
bastla
bastla 28.02.2013 um 10:20:33 Uhr
Goto Top
@ andimue
Sehe ich genauso und habe ich nur darum nicht hier angeführt, weil dieses Tutorial ohnehin im oben erwähnten Beitrag (allerdings erst ganz am Ende) verlinkt ist ...

Grüße
bastla