murphy1
Goto Top

Teil aus txt auslesen

Ich habe schon seit gestern morgen gesucht, finde aber keine Lösung dafür.

Ich habe eine TXT mit dem Inhalt eines Dir Befehls.
Nun möchte ich den Dateinamen aus dieser TXT auslesen.
 Datenträger in Laufwerk I: ist Global
 Volumeseriennummer: 5EFD-72A8

 Verzeichnis von I:\"PFAD"  

18.01.2012  14:23               658 CF11M100_"sn"_TempCal-TTU_"YYYYMMDD"_"hhmm".xml  
               1 Datei(en),            658 Bytes
               0 Verzeichnis(se), 248'206'131'200 Bytes frei  
Es befindet sich nie mehr als eine Datei mit der Serienummer in einem Verzeichnis.
Sonst wird der Ablauf sowiso unterbrochen.

CF11M100 ist statisch
"sn" ist dynamisch aber bekannt
TempCal-TTU ist statisch
und der Rest ist dynamisch und unbekannt. (existiert auch nicht immer)

Nun würde ich gerne den ganzen Dateinamen (CF11M100_"sn"_TempCal-TTU_"YYYYMMDD"_"hhmm".xml) in eine Variable einlesen.

Ich brauche den ganzen Dateinamen in einer Variable, weil ich ihn danach einem CommandLineTool übergeben muss.
Da funktioniert es nicht wenn man es mit '*' schreibt.

Content-Key: 188559

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: Sheogorath
Sheogorath Jul 25, 2012 at 07:23:50 (UTC)
Goto Top
Halloechen,

habe ich inzwischen schon mehrfach gemacht hier mal mein Code:

for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ DATEI.txt') do @(  
        for /L %%a in (3,1,3) do @if %%i==%%a @SET VARIABLE=%%j
)


set VARIABLE=%VARIABLE:~26,2%

mit der FOR-Schleife, liest du die datei aus, mit der zweiten legst du die Zeile(n) fest, welche ausgelesen werden sollen und mit dem Set zum schluss, kannst du ueber die exakte laenge der Variable bestimmen.

Hoffe ich konnte dir helfen

Gruss
Chris
Member: bastla
bastla Jul 25, 2012 updated at 07:55:43 (UTC)
Goto Top
Hallo murphy1 und willkommen im Forum!

Wieso erzeugst Du eine Datei, und weshalb verwendest Du nicht gleich
dir /b/a-d "I:\Pfad\CF11M100*.xml"
In eine (Lauf-)Variable bekommst Du den Namen mit
for /f "delims=" %%i in ('dir /b/a-d "I:\Pfad\CF11M100*.xml"') do echo Starte Tool mit %%i
oder, wenn es unbedingt eine eigene Variable sein soll:
for /f "delims=" %%i in ('dir /b/a-d "I:\Pfad\CF11M100*.xml"') do set "Var=%%i"
Grüße
bastla
Member: murphy1
murphy1 Jul 25, 2012 at 08:21:32 (UTC)
Goto Top
Hallo bastla

Vielen Dank für deinen Beitrag

Ich erzeuge die Datei, weil ich sie sowiso benötige für
findstr /c:"1 Datei(en)," %CD%\DeviceVerify_File.log > nul  
if %errorlevel% EQU 0 (
	REM BEFEHL
) ELSE (
	REM BEFEHL
)
wenn ich den von dir angegebenen Befehl anwende steht in der Variable
DeviceVerify_File.log
Ich möchte aber ein Teil vom Inhalt dieser Datei in der Variable wie oben beschrieben.
Member: murphy1
murphy1 Jul 25, 2012 at 08:23:32 (UTC)
Goto Top
Hallo Christoph

Vielen Dank für deinen Beitrag

Kannst du mir vielleicht beschreiben was genau dieser for befehl tut?
Vielleicht schaffe ich es, ihn selber anzupassen.
Ich kenne ihn nicht allzu gut und so wie du ihn geschrieben has funktioniert er nicht.
Member: Sheogorath
Sheogorath Jul 25, 2012 at 09:02:31 (UTC)
Goto Top
Halloechen,

Klar ;)

for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ DATEI.txt') do @(  

hiermit wird festgelegt, dass es fuer zeile dieser Datei (DATEI.txt) ausgefuehrt wird. und zwar mit einem Findstr mit ausgabe der Zeile, welche irgendwas enthaelt.
        for /L %%a in (3,1,3) do @if %%i==%%a @SET VARIABLE=%%j
)
hier wird die passende Zeile rausgessucht, und sobald die Zeilen uebereinstimmen, wird die Variable (VARIABLE) gesetzt
set VARIABLE=%VARIABLE:~26,2%
Hier wird die Variable (VARIABLE) einfach verkuertzt. Mit %VARIABLE:~26,2% wird erst ab der 26. Stelle angefangen zu lesen, und die 2 bedeutet, von der 26. Stelle aus, 2 Zeichen genommen werden.

Anpassen muesstest du alsofolgene Werte:
VARIABLE
DATEI.txt
:~26,2

soblad du das angepasst hast, sollte es funktionieren.

Gruss
Chris
Member: bastla
bastla Jul 25, 2012 at 09:27:03 (UTC)
Goto Top
Hallo murphy1!

Mit dem vond Dir angegebenen Schnipsel prüfst Du ja nur in der Datei "DeviceVerify_File.log" (das %CD%\ davor ist übrigens überflüssig), ob genau eine Datei gefunden wurde - mein Vorschlag ging in die Richtung, auf das Ausgeben des Inhaltsverzeichnisses in die Datei zu verzichten und gleich direkt mit dem gefundenen Dateinamen weiter zu arbeiten ...
wenn ich den von dir angegebenen Befehl anwende steht in der Variable
DeviceVerify_File.log
Diese Möglichkeit würde ich ausschließen, wenn Du tatsächlich
for /f "delims=" %%i in ('dir /b/a-d "I:\Pfad\CF11M100*.xml"') do set "Var=%%i"
verwendet hast ...

BTW: Wenn mit der Möglichkeit zu rechnen ist, dass keine Datei gefunden wird, könnte das etwa so aussehen:
set "Var="  
for /f "delims=" %%i in ('dir /b/a-d "I:\Pfad\CF11M100*.xml" 2^>nul') do set "Var=%%i"  
if defined Var (
    echo Datei %Var% gefunden
) else (
    echo Keine Datei gefunden
)
Grüße
bastla
Member: murphy1
murphy1 Jul 25, 2012 at 09:48:43 (UTC)
Goto Top
Vielen Dank für Euere Hilfe

Durch die Erklährung von Christoph kenne ich die ganze for /f Sache besser und
mit den Codeschnipseln von bastla brachte ich das ganze zum funktionieren.

Diese Frage wurde gelöst.
Member: bastla
bastla Jul 25, 2012 at 09:55:58 (UTC)
Goto Top
Hallo murphy1!
Durch die Erklährung von Christoph kenne ich die ganze for /f Sache besser
Wenn Du noch mehr wissen willst: Tutorial zur FOR-Schleife

Grüße
bastla