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-Key: 202446

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: bastla
bastla Feb 27, 2013 updated at 14:35:26 (UTC)
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?
Member: NeuNeu
NeuNeu Feb 27, 2013 at 12:16:17 (UTC)
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
Member: andimue
andimue Feb 27, 2013 at 14:25:38 (UTC)
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
Member: NeuNeu
NeuNeu Feb 27, 2013 at 16:23:27 (UTC)
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
Member: bastla
bastla Feb 27, 2013 updated at 18:54:58 (UTC)
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
Member: andimue
andimue Feb 28, 2013 at 06:50:49 (UTC)
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
Member: bastla
bastla Feb 28, 2013 at 09:20:33 (UTC)
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