ghost-in-the-shell
Goto Top

Ein Datum aus einer Txt filtern mit for-schleife

Hallo alle Zusammen, ich bin der Neue!

Ich finde euer Forum echt Klasse und es ist mir hier schon oft geholfen worden nur durch lesen,
allerdings habe ich jetzt ein kleines Problem, bzw komme ich einfach nicht auf die Lösung.

und zwar möchte ich gerne mit Batch ein Datum einer Datei herausfinden und als Variable setzen

das Einzige was mir als mögliche Lösung eingefallen ist, ist ein kleiner Umweg über eine temp.txt

Beispiel:
und würde ich dann "dir found.rar >> temp.txt" eingeben

in der Temp.txt befindet sich dann das:

Datenträger in Laufwerk C: ist XYZ
Volumeseriennummer: XYZ

Verzeichnis von C:\test

23.09.2006 02:26 181.343 found.rar
1 Datei(en) 181.343 Bytes
0 Verzeichnis(se), 27.410.919.424 Bytes frei

so jetzt könnte ich doch mit einer For-Schleife bestimmt das Datum "herausfiltern" und als Variable setzen,
allerdings komme ich nicht auf die Lösung :/

Ich hoffe es kann mir jemand helfen oder jemand hat eine andere "direkte" Lösung
Vielen Dank im Vorraus

Ucbalu

Content-Key: 41029

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

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

Member: Biber
Biber Sep 27, 2006 at 17:54:40 (UTC)
Goto Top
Moin Ucbalu,

wenn Du es über den Weg mit einer Zwischendatei machen willst, dann musst Du erst deine Sicht auf die Datei auf die eine für Dich interessante Zeile beschränken.

Dazu bietet sich ein "Find"- oder "FindStr"-Aufruf mit dem Suchbegriff Dateiname (in Deinem Beispiel "found.rar") an.

Das wäre ja dieser Zwischenschritt:
>type temp.txt|find /i "found.rar"  
23.09.2006 02:26 181.343 found.rar
REM -oder-, gleiches Ergebnis ohne Tempdatei:
dir found.rar|find /i "found.rar"  
23.09.2006 02:26 181.343 found.rar

Diese eine Zeile wiederum liest Du mit einer FOR /F...IN..DO-Anweisung ein.
Und speicherst die Variable in %myFiledate% oder so etwas.
>REM Demo am CMD-Prompt:
>for /f %i in ('dir found.rar^|find /i "found.rar"') do @set MyFileDate=%i  
23.09.2006

Im Batch entsprechend ein %-Zeichen mehr bei der Zählvariablen %i:
for /f %%i in ('dir found.rar^|find /i "found.rar"') do set MyFiledate=%%i

Gruß
Biber
Member: Biber
Biber Sep 27, 2006 at 20:50:56 (UTC)
Goto Top
Geht auch.
Demo am CMD-Prompt:
>set mydate=%date%
>set mydate
mydate=27.09.2006
>for /f "tokens=1-3 delims=." %i in ("%mydate%") do set "myvar1=%i" & set "myvar2=%j" & set "myvar3=%k"  
set "myvar1=27"   & set "myvar2=09"   & set "myvar3=2006"  
>set my
mydate=27.09.2006
myvar1=27
myvar2=09
myvar3=2006
[Alle Befehle mit voranstehendem ">" kannst Du so an Deinem Prompt eingeben und es Schritt für Schritt nachturnen]

Auf Dein Beispiel oben angewendet wäre es dann im Batch:
 .... [...in den Tiefen deiner Batchdatei....]
for /f "tokens=1-3 delims=." %%i in ('dir found.rar^|find /i "found.rar"') do set "MyTT=%%i" & set "myMM=%%j" & set "MyYYYY=%%k"  
....

Die ganze FOR /F-Syntax findest Du unter "FOR /?" am CMD-Prompt ganz brauchbar erklärt.
Im Bereich Batch & Shell findest Du auch ein kleines Tutorial zum Thema "Umgang mit Datums- und Zeitvariablen im Batch".

Gruß Biber
Member: Biber
Biber Sep 28, 2006 at 19:12:52 (UTC)
Goto Top
Klar, Ucbalu,

Du kannst keine, einen ohne mehrere delims angeben.
In Deinem ersten Beispiel auch noch ein zusätzliches Leerzeichen.
Das ist mir entweder beim CopyPaste nach HTML verloren gegangen oder ich habe es vergessen... face-wink
>for /f "tokens=1-3 delims=. " %i in ("29.09.2006 21:05") do set "myvar1=%i" & set "myvar2=%j" & set "myvar3=%k"  

>set "myvar1=29"   & set "myvar2=09"   & set "myvar3=2006"  

Oder, wenn das Datum mal mit "-", mal mit "/", mal mit "." daherkommt, eben "delims=-/."

Nachzulesen ist das
- bei M$ z.B. in der Hilfe zum FOR-Befehl,
- in vielen guten Tankstellen-PC-Zeitschriften oder
- hier im Forum im Bereich "Batch & Shell" in dem Tutorial .
--> auch speziell auf die Datumswert-Aufdröselung eingehend.

Grüße
Biber