91183
07.02.2011, aktualisiert am 08.02.2011
6237
23
0
Letztes Wort der aktuellsten Datei als Variable setzen
Hallo,
ich habe irgendwie ein Problem mit diesem Teil meines Skriptes. Habe auch schon die Suchfunktion
benutz und dies bezüglich eine ganze Sammlung an guten Treffern bekommen aber heute scheint nicht mein Tag
zu sein, da ich in diesem Punkt einfach nicht weiter komme.
Also, der Teil des Skriptes soll folgendes machen:
1. Die aktuellste Datei mit dem Namen "Idee" in einem bestimmten Ordner suchen
(Beispiel zu diesem Fall: "Idee_20110207_162351.txt")
2. Aus dieser .txt-Datei ausschließlich das letzte Wort in der letzten Zeile als Variable setzen.
3. Die Variable überprüfen und bei einem bestimmten Wort zu einem anderen Punkt im Script springen.
(Beispiel: wenn
%var% = "start"
dann
goto Part-2)
4. Die aktuellste Datei nach einer Minute erneut prüfen, falls %var% ≠ start
(Dateien werden zwar mehrfach pro Minute aktualisiert aber so reicht das).
Punkt 3 und 4 sollten jetzt nicht das Problem darstellen aber da ich heute anscheinend eh nicht so gut drauf bin. . .
Danke schon mal für Eure Hilfe.
ich habe irgendwie ein Problem mit diesem Teil meines Skriptes. Habe auch schon die Suchfunktion
benutz und dies bezüglich eine ganze Sammlung an guten Treffern bekommen aber heute scheint nicht mein Tag
zu sein, da ich in diesem Punkt einfach nicht weiter komme.
Also, der Teil des Skriptes soll folgendes machen:
1. Die aktuellste Datei mit dem Namen "Idee" in einem bestimmten Ordner suchen
(Beispiel zu diesem Fall: "Idee_20110207_162351.txt")
2. Aus dieser .txt-Datei ausschließlich das letzte Wort in der letzten Zeile als Variable setzen.
3. Die Variable überprüfen und bei einem bestimmten Wort zu einem anderen Punkt im Script springen.
(Beispiel: wenn
%var% = "start"
dann
goto Part-2)
4. Die aktuellste Datei nach einer Minute erneut prüfen, falls %var% ≠ start
(Dateien werden zwar mehrfach pro Minute aktualisiert aber so reicht das).
Punkt 3 und 4 sollten jetzt nicht das Problem darstellen aber da ich heute anscheinend eh nicht so gut drauf bin. . .
Danke schon mal für Eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160239
Url: https://administrator.de/contentid/160239
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
23 Kommentare
Neuester Kommentar
Hallo Xeno--!
Die neueste Datei findest Du (je nachdem, ob Du auf den Namen abstellen willst oder tatsächlich auf das Änderungsdatum) mit einem "
Danach kannst Du dann mit einer weiteren "
[Edit] Nachtrag: Wenn es überhaupt nur darum geht, dieses letzte Wort für eine Abfrage zu nutzen, kann der letzte Teil auch so aussehen:
Vorausgesetzt wurde dabei, dass es vor dem letzten Wort ein Leerzeichen gibt (es also nicht die gesamte letzte Zeile bildet) ...
[/Edit]
Grüße
bastla
Die neueste Datei findest Du (je nachdem, ob Du auf den Namen abstellen willst oder tatsächlich auf das Änderungsdatum) mit einem "
dir /b /on
" oder "dir /b /od
" und kannst sie aus einer "for /f
"-Schleife heraus einer Variablen zuweisen.Danach kannst Du dann mit einer weiteren "
for /f
"-Schleife die letzte Zeile auslesen (falls es ein Erkennungskriterium gäbe, schneller über "findstr
") und schließlich aus dieser Variablen per "gewöhnlicher" "for
"-Schleife das letzte Wort - als Demo des letzten Schrittes etwa:@echo off & setlocal
set "Zeile=Aus dieser .txt-Datei ausschließlich das letzte Wort in der letzten Zeile als Variable setzen."
for %%i in (%Zeile%) do set "Letztes=%%i"
echo %Letztes%
echo %Zeile%|findstr /i /e /c:" start">nul && echo Letztes Wort ist "start" || echo Letztes Wort ist nicht "start"
[/Edit]
Grüße
bastla
moin Xeno,
das letzte Wort kannst Du mithilfe dieses Schnipsels aus einer Datei rausholen:
steht dann in Variable Lastsigns
[Edit] einen fix für die Ausrufezeichen eingefügt [/Edit]
[Edit2] einen Fix für Zeilen mit Tab/ Leerzeichen eingefügt [/Edit]
Gruß Phil
das letzte Wort kannst Du mithilfe dieses Schnipsels aus einer Datei rausholen:
steht dann in Variable Lastsigns
:: Übergibt in die Variable lastsigns das letzte Wort der Als Parameter 1 übergebenen Datei
@echo off&setlocal disabledelayedexpansion
(
echo @echo off
echo echo."%%Zeile: =!LF!%%"
)>"%temp%\LZ2LF.cmd"
setlocal enabledelayedexpansion
:CreateLF
set LF=^
rem ** The two empty lines are neccessary, spaces are not allowed
setlocal disabledelayedexpansion
for /f "usebackq tokens=*" %%i in ("%~1") do for /f %%j in ("%%~i") do set "Zeile=%%i"
endlocal&set "Zeile=%Zeile:!=$#³#²#$%"
for /f %%j in ('"%temp%\LZ2LF.cmd"') do for /f %%k in ("%%~j") do set "lastSigns=%%k"
endlocal&set "lastSigns=%lastSigns:$#³#²#$=!%"
endlocal&set "lastsigns=%lastsigns%
[Edit] einen fix für die Ausrufezeichen eingefügt [/Edit]
[Edit2] einen Fix für Zeilen mit Tab/ Leerzeichen eingefügt [/Edit]
Gruß Phil
... und für etwas kniffligere Fälle (enthaltene Sonderzeichen, letztes Wort = gesamter Inhalt der letzten Zeile) könnte die Ermittlung des letzten Wortes der Datei "%NeuesteDatei%" etwa so aussehen:
Grüße
bastla
set G=%temp%\GetLastWord.vbs
> %G% echo T=RTrim(Replace(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll,vbCrLf," "))
>>%G% echo WScript.Echo Mid(T,InStrRev(T," ")+1)
for /f "delims=" %%i in ('cscript //nologo %G% "%NeuesteDatei%"') do set "Letztes=%%i"
bastla
Hallo PH!
Ja, nur für den Fall, dass in der letzten Zeile nur ein einziges Wort (bzw kein einziges Leerzeichen) steht (entweder daran oder an der mangelnden Genauigkeit - falls ich das Leerzeichen im Suchbegriff wegließe und das gesuchte Wort das Ende eines längeren Wortes bildete - würde mein "
Wenn übrigens Xeno-- etwas mehr Info zur Textdatei zu bieten gehabt hätte, wären solche Überlegungen vermutlich überflüssig gewesen.
Grüße
bastla
Ja, nur für den Fall, dass in der letzten Zeile nur ein einziges Wort (bzw kein einziges Leerzeichen) steht (entweder daran oder an der mangelnden Genauigkeit - falls ich das Leerzeichen im Suchbegriff wegließe und das gesuchte Wort das Ende eines längeren Wortes bildete - würde mein "
findstr
"-Ansatz von oben scheitern) ...Wenn übrigens Xeno-- etwas mehr Info zur Textdatei zu bieten gehabt hätte, wären solche Überlegungen vermutlich überflüssig gewesen.
Grüße
bastla
Hallo,
jetzt noch die Batch Variante die mit Sonderzeichen &<>... und auch mit ! funktioniert und ohne temporäre Datei auskommt.
Grüße
jeb
jetzt noch die Batch Variante die mit Sonderzeichen &<>... und auch mit ! funktioniert und ohne temporäre Datei auskommt.
@echo off
setlocal DisableDelayedExpansion
rem ** Linefeed erzeugen
set LF=^
rem ** Zwei leere Zeile erforderlich
rem ** Letzte Zeile rausholen
for /f "usebackq tokens=*" %%i in ("%~1") do for /f %%j in ("%%~i") do set "Zeile=%%i"
rem ** In Zeile die Spaces durch Linefeed ersetzen
setlocal EnableDelayedExpansion
for %%a in ("!LF!") do set "zeile=!zeile: =%%~a!"
set "last="
for /f "delims=" %%j in ("!Zeile!") do (
if not defined last endlocal
set "last=%%j"
)
setlocal Enabledelayedexpansion
echo LAST="!last!"
Grüße
jeb
Hallo Xeno--!
Für das gepostete Beispiel sollte
genügen (wenn nur am Ende der vorletzen Zeile eine Zeilenschaltung steht, die letzte Zeile aber leer ist) ...
Das letzte Wort wird (in dieser Fassung) als der Teil der Zeile nach dem letzten Leerzeichen, Komma, Semikolon, Tab interpretiert - wenn es daher nur um "$" als Sonderzeichen geht, ist das kein Problem ...
Zur Sortierung: Da "2" nach "1" kommt, wird auch "221259" nach "184933" einsortiert (der Teil davor ist ja jeweils gleich) - der letzte aufgelilstete Dateiname bleibt in der Variablen %NeuesteDatei% (die vorhergehenden werden jeweils durch die nachfolgenden überschrieben), daher ist das Ergebnis die lt Dateiname neueste Datei.
Wenn es mehrere Wörter zu unterscheiden gibt, ist natürlich "
Grüße
bastla
Für das gepostete Beispiel sollte
@echo off & setlocal
set "pfad=set pfad=%userprofile%\eigene dateien\logs\"
pushd "%pfad%"
for /f "delims=" %%i in ('dir /b /on "Idee*.txt" 2^>nul') do set "NeuesteDatei=%%i"
for /f "usebackq delims=" %%i in ("%NeuesteDatei%") do set "Zeile=%%i"
setlocal enabledelayedexpansion
for %%i in (!Zeile!) do set "Letztes=%%i"
endlocal & set "Letztes=%Letztes%"
popd
echo %Letztes%
Das letzte Wort wird (in dieser Fassung) als der Teil der Zeile nach dem letzten Leerzeichen, Komma, Semikolon, Tab interpretiert - wenn es daher nur um "$" als Sonderzeichen geht, ist das kein Problem ...
Zur Sortierung: Da "2" nach "1" kommt, wird auch "221259" nach "184933" einsortiert (der Teil davor ist ja jeweils gleich) - der letzte aufgelilstete Dateiname bleibt in der Variablen %NeuesteDatei% (die vorhergehenden werden jeweils durch die nachfolgenden überschrieben), daher ist das Ergebnis die lt Dateiname neueste Datei.
Wenn es mehrere Wörter zu unterscheiden gibt, ist natürlich "
findstr
" nicht das geeignete Werkzeug ...Grüße
bastla
Hallo Xeno--!
Das deutet dann darauf hin, dass die letzte Zeile doch nicht ganz leer ist ...
Soferne nur Leerzeichen enthalten wären, könntest Du es mit folgender Zeile 6 versuchen:
[Edit] Besser so:
[/Edit]
Grüße
bastla
Das deutet dann darauf hin, dass die letzte Zeile doch nicht ganz leer ist ...
Soferne nur Leerzeichen enthalten wären, könntest Du es mit folgender Zeile 6 versuchen:
for /f "delims=" %%i in ('findstr /v /x " *" "%NeuesteDatei%"') do set "Zeile=%%i"
for /f "usebackq delims=" %%i in ("%NeuesteDatei%") do for /f %%a in ("%%i") do set "Zeile=%%i"
Grüße
bastla
Hallo Xeno--!
Meine Vorschläge waren ja nur für den Fall gedacht, dass die letzte Zeile nur Leerzeichen enthielte ...
Könntest Du mit einem Hexeditor (zB Tiny Hexer) mal nachsehen, was sich tatsächlich in der letzten Zeile befindet?
Grüße
bastla
Meine Vorschläge waren ja nur für den Fall gedacht, dass die letzte Zeile nur Leerzeichen enthielte ...
Könntest Du mit einem Hexeditor (zB Tiny Hexer) mal nachsehen, was sich tatsächlich in der letzten Zeile befindet?
Grüße
bastla