Finde Datei von heute die xxx als Zeichenkette beinhaltet
Hallo Zusammen,
bin wieder an meinen Versuchen eine batch aufzusetzen ins stolpern geraten und hoffe mir von euch Hilfen.
Das ganze soll wie folgt aussehen:
1. prüfe, ob Anwendung.exe läuft
a) JA, dann echo "Anwendung läuft"
b) NEIN, dann prüfe, ob datei.csv vorhanden ist
a) JA, dann echo "Prozess erfolgreich beendet"
b) NEIN, dann starte Anwendung.exe
2. beende Anwendung.exe um 23:59Uhr
So, meine ersten Versuche sehen wie folgt aus:
irgenntwie bekomme ich das nicht hin. Ich suche eine Datei, die eine bestimmte Zeichenfolge beinhaltet und das heutige Datum hat. Wie kann ich das innerhalb der else-Bedingung formulieren?
Damit bekomme ich auch nicht die richtige Datei, warum nicht?
Weiterhin, wie kann ich die .exe mit der bat starten?
Gruss und Dank
chappy
bin wieder an meinen Versuchen eine batch aufzusetzen ins stolpern geraten und hoffe mir von euch Hilfen.
Das ganze soll wie folgt aussehen:
1. prüfe, ob Anwendung.exe läuft
a) JA, dann echo "Anwendung läuft"
b) NEIN, dann prüfe, ob datei.csv vorhanden ist
a) JA, dann echo "Prozess erfolgreich beendet"
b) NEIN, dann starte Anwendung.exe
2. beende Anwendung.exe um 23:59Uhr
So, meine ersten Versuche sehen wie folgt aus:
@echo off
set "Pfad=C:\Test\"
tasklist |findstr "Anwendung\.exe" >nul
if %errorlevel% == 0 (
echo Das Programm leauft gerade!
) else (
echo Das Programm leauft gerade nicht!
??????????
)
else if exist ( 'dir "%Pfad%"^|findstr /m "\<%date%*_File_Test_Name.csv" ' ) (
echo Der Prozess ist erfolgreich abgeschlossen
) else (
Anwendung.exe
Damit bekomme ich auch nicht die richtige Datei, warum nicht?
Weiterhin, wie kann ich die .exe mit der bat starten?
Gruss und Dank
chappy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153525
Url: https://administrator.de/forum/finde-datei-von-heute-die-xxx-als-zeichenkette-beinhaltet-153525.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo chappy!
Heißt die .csv immer "File_Test_Name.csv"? Wenn ja ungetestet etwa so:
Falls nein:
Zur Sicherheit solltest du kontrollieren, ob das Format von "%date%" mit (dem Beginn von) "%%~ti" übereinstimmt ...
Zu
Grüße
bastla
Heißt die .csv immer "File_Test_Name.csv"? Wenn ja ungetestet etwa so:
) else (
for %%i in ("%Pfad%File_Test_Name.csv") do echo %%~ti|findstr "%date:.=\.%">nul && (
findstr "Suchbegriff" "%Pfad%File_Test_Name.csv">nul && (echo Der Prozess ist erfolgreich abgeschlossen & goto :Weiter)
)
Anwendung.exe
)
:Weiter
) else (
set "Gef="
for /f "delims=" %%i in ('findstr /m "Suchbegriff" "%Pfad%*.csv"') do if not defined Gef echo %%~ti|findstr "%date:.=\.%">nul && (echo Der Prozess ist erfolgreich abgeschlossen & set "Gef=True")
if not defined Gef Anwendung.exe
)
Zu
2. beende Anwendung.exe um 23:59Uhr
Geplanter Task mit "taskkill
"Grüße
bastla
Hallo chappy!
... wobei sich die Suche nach dem Dateinamen aber noch einfacher gestalten sollte:
Grüße
bastla
P.S.: Bleibt noch die Frage offen, welches Ergebnis "
das heutige Datum hat
hatte ich mit "Änderungsdatum" übersetzt ...... wobei sich die Suche nach dem Dateinamen aber noch einfacher gestalten sollte:
) else (
set "Gef="
for /f "delims=" %%i in ('findstr /m "Suchbegriff" "%Pfad%%date:~-4%%date:~-7,2%%date:~-10,2%_*_Bezeichnung!_Bezeichnung2.csv"') do && if not defined Gef (echo Der Prozess ist erfolgreich abgeschlossen & set "Gef=True")
if not defined Gef Anwendung.exe
)
bastla
P.S.: Bleibt noch die Frage offen, welches Ergebnis "
echo %date%
" bei Dir liefert - für "21.10.2010" (auch mit Wochentagsangabe davor) sollte das klappen ...
Hallo chappy,
hier mein Vorschlag zu Lösung des Problems.
Ich habe hier versucht, das Skript so zu schreiben, das das Datumsformat des Systems (fast) egal ist. Was nicht klappt, wäre ein Datumsformat wie So., 24.10.2010, da hier der Punkt hinter So stören würde, oder ein englisches Datumsformat wie MM.DD.YYYY oder das amerikanische YYYY.MM.DD oder ein anderes Datumstrennzeichen als der Punkt. Das würde Anpassungen erfordern.
Die Variablen String1 und String2 müssen mit dem anscheinend festen Bestandteil des Dateinamens belegt werden, die Du in Deinem Posting als Bezeichnung1 und Bezeichnung2 benannt hast.
In der FOR-Schleife in den Zeilen 16 bis 26 wird das aktuelle Datum in seine Bestandteile zerpflückt. Der Punkt und Leerzeichen zählen als Trennzeichen (Datumstrennzeichen). Wenn vor den Zahlen des Datums noch nicht-numerische Zeichen (z.B. Sonntag, ) stehen (der FINDSTR-Befehl in Zeile 17 findet diese), wird die Zerlegung anders ausgeführt, als bei einem puren Datum ohne Wochentag. Aus diesen Angaben wird in Zeile 28 eine Dateimaske zusammengebaut.
Zeile 30 sucht nach dem gewünschten Programm.
In Zeile 35 wir mit IF EXIST nach Dateien, die auf die eben generierte Dateimaske passen, gesucht. Wenn eine oder mehrere solche Dateien existieren, wird das Unterprogramm ProcessFile aufgerufen.
Die FOR-Schleife in Zeile 52 findet alle Dateien, auf die die Dateimaske passt. Die FOR-Schleife in Zeile 53 liefert den Zeitstempel aller dieser Dateien, der in seine Bestandteile zerlegt wird. Trennzeichen sind Punkt, Doppelpunkt und Leerzeichen (Datumstrennzeichen und Uhrzeittrennzeichen). In Zeile 54 wird wieder nach nicht-numerischen Zeichen vor den Zahlen des Datums gesucht. Je nachdem, zu welchem Ergebnis diese Suche geführt hat, wird in den Zeilen 55 und 57 der Dateiname der Datei, die nach dem Suchbegriff durchsucht werden soll, zusammengebaut und die Datei durchsucht. Wird der Begriff gefunden, wird das Unterprogramm mit dem Rückgabewert 0 beendet. Wird in keiner der durchsuchten Dateien der Begriff gefunden oder wenn keine Dateien gefunden wurden, auf die die Dateimaske passt, wird mit dem Rückgabewert 1 beendet.
Je nach Rückgabewert wird dann in Zeile 37 eine Erfolgsmeldung ausgegeben oder in Zeile 39 die gewünschte Anwendung gestartet. Wenn vorher schon keine Dateien gefunden wurden, auf die die Dateimaske passt, wird die Anwendung in Zeile 42 ebenfalls gestartet.
Da ich das Skript nicht vollständig getestet habe, poste ich es erstmal so ohne einen Monitor, der die Anwendung zu einer bestimmten Zeit beendet, kann ich ja noch nachliefern.
Gruß
Friemler
hier mein Vorschlag zu Lösung des Problems.
@echo off
setlocal
set "FilePath=E:"
set "String1=String1"
set "String2=String2"
set "SearchStr=Ein Begriff"
set "ProgPath=C:\Programme\Beispiel"
set "ProgName=Anwendung.exe"
for /f "tokens=1-4 delims=. " %%p in ('echo %date%') do (
echo %%p|findstr "[^0-9]" > NUL && (
set "dd=%%q"
set "mm=%%r"
set "yy=%%s"
) || (
set "dd=%%p"
set "mm=%%q"
set "yy=%%r"
)
)
set "FileMask=%yy%%mm%%dd%_????_%String1%_%String2%.csv"
tasklist | findstr /b /i "%ProgName:.=\.%" > NUL && (
echo Das Programm leauft gerade!
) || (
echo Das Programm leauft gerade nicht!
if exist "%FilePath%\%FileMask%" (
call :ProcessFile && (
echo "Prozess erfolgreich beendet"
) || (
"%ProgPath%\%ProgName%"
)
) else (
"%ProgPath%\%ProgName%"
)
)
endlocal
exit /b
:ProcessFile
for %%f in ("%FilePath%\%FileMask%") do (
for /f "usebackq tokens=1-6 delims=:. " %%p in ('%%~tf') do (
echo %%p|findstr "[^0-9]" > NUL && (
findstr /c:"%SearchStr%" "%FilePath%\%yy%%mm%%dd%_%%t%%u_%String1%_%String2%.csv" > NUL && exit /b 0
) || (
findstr /c:"%SearchStr%" "%FilePath%\%yy%%mm%%dd%_%%s%%t_%String1%_%String2%.csv" > NUL && exit /b 0
)
)
)
exit /b 1
Ich habe hier versucht, das Skript so zu schreiben, das das Datumsformat des Systems (fast) egal ist. Was nicht klappt, wäre ein Datumsformat wie So., 24.10.2010, da hier der Punkt hinter So stören würde, oder ein englisches Datumsformat wie MM.DD.YYYY oder das amerikanische YYYY.MM.DD oder ein anderes Datumstrennzeichen als der Punkt. Das würde Anpassungen erfordern.
Die Variablen String1 und String2 müssen mit dem anscheinend festen Bestandteil des Dateinamens belegt werden, die Du in Deinem Posting als Bezeichnung1 und Bezeichnung2 benannt hast.
In der FOR-Schleife in den Zeilen 16 bis 26 wird das aktuelle Datum in seine Bestandteile zerpflückt. Der Punkt und Leerzeichen zählen als Trennzeichen (Datumstrennzeichen). Wenn vor den Zahlen des Datums noch nicht-numerische Zeichen (z.B. Sonntag, ) stehen (der FINDSTR-Befehl in Zeile 17 findet diese), wird die Zerlegung anders ausgeführt, als bei einem puren Datum ohne Wochentag. Aus diesen Angaben wird in Zeile 28 eine Dateimaske zusammengebaut.
Zeile 30 sucht nach dem gewünschten Programm.
In Zeile 35 wir mit IF EXIST nach Dateien, die auf die eben generierte Dateimaske passen, gesucht. Wenn eine oder mehrere solche Dateien existieren, wird das Unterprogramm ProcessFile aufgerufen.
Die FOR-Schleife in Zeile 52 findet alle Dateien, auf die die Dateimaske passt. Die FOR-Schleife in Zeile 53 liefert den Zeitstempel aller dieser Dateien, der in seine Bestandteile zerlegt wird. Trennzeichen sind Punkt, Doppelpunkt und Leerzeichen (Datumstrennzeichen und Uhrzeittrennzeichen). In Zeile 54 wird wieder nach nicht-numerischen Zeichen vor den Zahlen des Datums gesucht. Je nachdem, zu welchem Ergebnis diese Suche geführt hat, wird in den Zeilen 55 und 57 der Dateiname der Datei, die nach dem Suchbegriff durchsucht werden soll, zusammengebaut und die Datei durchsucht. Wird der Begriff gefunden, wird das Unterprogramm mit dem Rückgabewert 0 beendet. Wird in keiner der durchsuchten Dateien der Begriff gefunden oder wenn keine Dateien gefunden wurden, auf die die Dateimaske passt, wird mit dem Rückgabewert 1 beendet.
Je nach Rückgabewert wird dann in Zeile 37 eine Erfolgsmeldung ausgegeben oder in Zeile 39 die gewünschte Anwendung gestartet. Wenn vorher schon keine Dateien gefunden wurden, auf die die Dateimaske passt, wird die Anwendung in Zeile 42 ebenfalls gestartet.
Da ich das Skript nicht vollständig getestet habe, poste ich es erstmal so ohne einen Monitor, der die Anwendung zu einer bestimmten Zeit beendet, kann ich ja noch nachliefern.
Gruß
Friemler
Hallo Friemler!
Wir wir ja erst neulich feststellen konnten gibt es hinsichtlich Datumsformat ja fast nichts, was es nicht gibt - insofern wären wir auch hier eigentlich nur mit einer anderen Sprache (meine wäre weiterhin VBS) auf der sicheren Seite ...
Grüße
bastla
Wir wir ja erst neulich feststellen konnten gibt es hinsichtlich Datumsformat ja fast nichts, was es nicht gibt - insofern wären wir auch hier eigentlich nur mit einer anderen Sprache (meine wäre weiterhin VBS) auf der sicheren Seite ...
Grüße
bastla
Salü,
*Hüstel* - gestern hab ich auch die Reg in meinem Schnippsel Ordner gefunden, die "das" angestellt hat
"Sowas" passiert halt, wenn man mal testet
Apropos testen und Versuchen
Eigentlich dürfte es bei diesem fieskrummen und wahrscheinlich viel zu aufwändigemWeg kein Pfad nach Rom unpassierbar sein?
Gruß
Zitat von @bastla:
Hallo Friemler!
Wir wir ja erst neulich feststellen konnten gibt es hinsichtlich
Datumsformat ja fast nichts, was es nicht gibt
Hallo Friemler!
Wir wir ja erst neulich feststellen konnten gibt es hinsichtlich
Datumsformat ja fast nichts, was es nicht gibt
*Hüstel* - gestern hab ich auch die Reg in meinem Schnippsel Ordner gefunden, die "das" angestellt hat
"Sowas" passiert halt, wenn man mal testet
Apropos testen und Versuchen
Eigentlich dürfte es bei diesem fieskrummen und wahrscheinlich viel zu aufwändigemWeg kein Pfad nach Rom unpassierbar sein?
:testballon
if exist test.test del test.test
echo test>test.test
dir test.test |find "test.test">test.test
for /f "tokens=1-3 delims=. " %%a in (test.test) do dir %%c.%%b.%%a_????_*!_*.csv |find "%%a.%%b.%%c" && echo krummeralskrumm
del test.test
Gruß
Hallo Timo,
echt abgefahren, Deine Idee mit der Dummy-Datei! Würde aber nur für das Datumsformat TT.MM.JJJJ funktionieren. Beim Datumsformat TTTT, TT.MM.JJJJ wird im Dateilisting von DIR der abgekürzte Wochentag vor dem Datum ausgegeben, dahinter ein Komma und ein Leerzeichen. In der FOR-Schleife hätte also %%a heute den Wert "Fr," , %%b den Wert "22" und %%c den Wert "10" => Dateimaske wird falsch zusammengebaut . Je nach Datumsformat werden also 3 oder 4 Tokens gebraucht.
Beim englischen oder amerikanischen Datumsformat stimmt die Anordnung von Tag, Monat und Jahr nicht (ich weiß, war bei meinem Skript auch so).
Ich vermute aber, das es Dir eher um eine kürzere Methode zum Auflisten aller Dateien vom heutigen Tag ging, die auf das vom TO vorgegebene Muster passen. Um deren Namen weiter verarbeiten zu können, müsste erst noch das Datum, die Uhrzeit und die Größe aus der Ausgabe gefiltert werden. Auch hier ist die Anzahl der Tokens vom Datumsformat abhängig.
Aber ansonsten gefällt mir Deine Idee, vor allem weil man Bezeichnung1 und Bezeichnung2 nicht kennen muss
Gruß
Friemler
echt abgefahren, Deine Idee mit der Dummy-Datei! Würde aber nur für das Datumsformat TT.MM.JJJJ funktionieren. Beim Datumsformat TTTT, TT.MM.JJJJ wird im Dateilisting von DIR der abgekürzte Wochentag vor dem Datum ausgegeben, dahinter ein Komma und ein Leerzeichen. In der FOR-Schleife hätte also %%a heute den Wert "Fr," , %%b den Wert "22" und %%c den Wert "10" => Dateimaske wird falsch zusammengebaut . Je nach Datumsformat werden also 3 oder 4 Tokens gebraucht.
Beim englischen oder amerikanischen Datumsformat stimmt die Anordnung von Tag, Monat und Jahr nicht (ich weiß, war bei meinem Skript auch so).
Ich vermute aber, das es Dir eher um eine kürzere Methode zum Auflisten aller Dateien vom heutigen Tag ging, die auf das vom TO vorgegebene Muster passen. Um deren Namen weiter verarbeiten zu können, müsste erst noch das Datum, die Uhrzeit und die Größe aus der Ausgabe gefiltert werden. Auch hier ist die Anzahl der Tokens vom Datumsformat abhängig.
Aber ansonsten gefällt mir Deine Idee, vor allem weil man Bezeichnung1 und Bezeichnung2 nicht kennen muss
Gruß
Friemler
Hallo chappy!
Grüße
bastla
bekomme ich die Meldung: ""&&" ist syntaktisch an dieser Stelle nicht verarbeitbar." - warum?
Relativ einfach zu erklären: Weil "&&" an dieser Stelle syntaktisch nicht verarbeitbar (bzw hier sowieso überflüssig) ist - war ein Überbleibsel der vorigen Version, daher bitte ersatzlos streichen und: Sorry wegen der Irritation ...kommt an die Stelle Suchbegriff mein Suchbegriff rein? ja, ne?
Hätte eigentlich eine Überraschung werden sollen, aber jetzt hast Du's schon erraten ... Grüße
bastla