Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Finde Datei von heute die xxx als Zeichenkette beinhaltet

Frage Entwicklung Batch & Shell

Mitglied: chappy

chappy (Level 1) - Jetzt verbinden

21.10.2010, aktualisiert 18.10.2012, 2877 Aufrufe, 12 Kommentare

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:

01.
@echo off 
02.
 
03.
set "Pfad=C:\Test\" 
04.
   
05.
tasklist |findstr "Anwendung\.exe" >nul  
06.
if %errorlevel% == 0 ( 
07.
 echo Das Programm leauft gerade! 
08.
 ) else ( 
09.
  echo Das Programm leauft gerade nicht!  
10.
   
11.
 ??????????   
12.
 
13.
 )
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?

01.
  else if exist ( 'dir "%Pfad%"^|findstr /m "\<%date%*_File_Test_Name.csv" '  ) ( 
02.
  echo Der Prozess ist erfolgreich abgeschlossen 
03.
  ) else ( 
04.
  Anwendung.exe 
05.
 
Damit bekomme ich auch nicht die richtige Datei, warum nicht?
Weiterhin, wie kann ich die .exe mit der bat starten?

Gruss und Dank
chappy
Mitglied: bastla
21.10.2010 um 13:00 Uhr
Hallo chappy!

Heißt die .csv immer "File_Test_Name.csv"? Wenn ja ungetestet etwa so:
01.
) else ( 
02.
    for %%i in ("%Pfad%File_Test_Name.csv") do echo %%~ti|findstr "%date:.=\.%">nul && ( 
03.
        findstr "Suchbegriff" "%Pfad%File_Test_Name.csv">nul && (echo Der Prozess ist erfolgreich abgeschlossen & goto :Weiter) 
04.
05.
    Anwendung.exe 
06.
07.
:Weiter
Falls nein:
01.
) else ( 
02.
    set "Gef=" 
03.
    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") 
04.
    if not defined Gef Anwendung.exe 
05.
)
Zur Sicherheit solltest du kontrollieren, ob das Format von "%date%" mit (dem Beginn von) "%%~ti" übereinstimmt ...
Zu
2. beende Anwendung.exe um 23:59Uhr
Geplanter Task mit "taskkill"

Grüße
bastla
Bitte warten ..
Mitglied: chappy
21.10.2010 um 14:01 Uhr
Hallo Bastla,

erst einmal herzlichen Dank für deine rasche Antwort.

leider funktioniert es nicht wirklich. Die gesuchte Datei sieht folgendermaßen aus:

JJJJMMTT_HHMM_Bezeichnung!_Bezeichnung2.csv

dabei ist JJJJMMTT das heutige Datum und die Uhrzeit entspricht auch der Erstellungsuhrzeit.

Gruss
chappy
Bitte warten ..
Mitglied: bastla
21.10.2010 um 15:02 Uhr
Hallo chappy!
das heutige Datum hat
hatte ich mit "Änderungsdatum" übersetzt ...

... wobei sich die Suche nach dem Dateinamen aber noch einfacher gestalten sollte:
01.
) else ( 
02.
    set "Gef=" 
03.
    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") 
04.
    if not defined Gef Anwendung.exe 
05.
)
Grüße
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 ...
Bitte warten ..
Mitglied: Friemler
21.10.2010 um 16:48 Uhr
Hallo chappy,

hier mein Vorschlag zu Lösung des Problems.
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "FilePath=E:" 
07.
set "String1=String1" 
08.
set "String2=String2" 
09.
 
10.
set "SearchStr=Ein Begriff" 
11.
 
12.
set "ProgPath=C:\Programme\Beispiel" 
13.
set "ProgName=Anwendung.exe" 
14.
 
15.
 
16.
for /f "tokens=1-4 delims=. " %%p in ('echo %date%') do ( 
17.
  echo %%p|findstr "[^0-9]" > NUL && ( 
18.
    set "dd=%%q" 
19.
    set "mm=%%r" 
20.
    set "yy=%%s" 
21.
  ) || ( 
22.
    set "dd=%%p" 
23.
    set "mm=%%q" 
24.
    set "yy=%%r" 
25.
26.
27.
 
28.
set "FileMask=%yy%%mm%%dd%_????_%String1%_%String2%.csv" 
29.
 
30.
tasklist | findstr /b /i "%ProgName:.=\.%" > NUL && ( 
31.
  echo Das Programm leauft gerade! 
32.
) || ( 
33.
  echo Das Programm leauft gerade nicht! 
34.
 
35.
  if exist "%FilePath%\%FileMask%" ( 
36.
    call :ProcessFile && ( 
37.
      echo "Prozess erfolgreich beendet" 
38.
    ) || ( 
39.
      "%ProgPath%\%ProgName%" 
40.
41.
  ) else ( 
42.
    "%ProgPath%\%ProgName%" 
43.
44.
45.
 
46.
endlocal 
47.
exit /b 
48.
 
49.
 
50.
 
51.
:ProcessFile 
52.
  for %%f in ("%FilePath%\%FileMask%") do ( 
53.
    for /f "usebackq tokens=1-6 delims=:. " %%p in ('%%~tf') do ( 
54.
      echo %%p|findstr "[^0-9]" > NUL && ( 
55.
        findstr /c:"%SearchStr%" "%FilePath%\%yy%%mm%%dd%_%%t%%u_%String1%_%String2%.csv" > NUL && exit /b 0 
56.
      ) || ( 
57.
        findstr /c:"%SearchStr%" "%FilePath%\%yy%%mm%%dd%_%%s%%t_%String1%_%String2%.csv" > NUL && exit /b 0 
58.
59.
60.
61.
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
Bitte warten ..
Mitglied: bastla
21.10.2010, aktualisiert 18.10.2012
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
Bitte warten ..
Mitglied: Friemler
21.10.2010 um 17:10 Uhr
Hallo bastla,

hast ja recht, war ja auch nur ein Versuch, wenigstens die zwei meistgebrauchten Formate TT.MM.JJJJ und TTTT, TT.MM.JJJJ unter einen Hut zu bringen.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
21.10.2010 um 17:15 Uhr
Hallo Friemler!
die zwei meistgebrauchten Formate TT.MM.JJJJ und TTTT, TT.MM.JJJJ unter einen Hut zu bringen.
Dazu genügt aber eigentlich das oben verwendete
%date:~-4%%date:~-7,2%%date:~-10,2%
Grüße
bastla
Bitte warten ..
Mitglied: 60730
21.10.2010, aktualisiert 18.10.2012
Salü,
Zitat von bastla:
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?

01.
:testballon 
02.
 
03.
if exist test.test del test.test 
04.
echo test>test.test 
05.
dir test.test |find "test.test">test.test 
06.
for /f "tokens=1-3 delims=. " %%a in (test.test) do dir %%c.%%b.%%a_????_*!_*.csv |find "%%a.%%b.%%c" && echo krummeralskrumm 
07.
del test.test

Gruß
Bitte warten ..
Mitglied: Friemler
22.10.2010 um 02:06 Uhr
Hallo bastla,

stimmt, ist auf jeden Fall kürzer und kommt ohne Fallunterscheidungen aus. Da hab' ich zu kompliziert gedacht.

Gruß
Friemler
Bitte warten ..
Mitglied: Friemler
22.10.2010 um 02:54 Uhr
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
Bitte warten ..
Mitglied: chappy
25.10.2010 um 14:12 Uhr
Hallo zusammen,

erst einmal herzlichen Dank für eure Antworten.

@bastla: wenn ich deinen Code ausführe, bekomme ich die Meldung: ""&&" ist syntaktisch an dieser Stelle nicht verarbeitbar." - warum?
weiterhin: kommt an die Stelle Suchbegriff mein Suchbegriff rein? ja, ne?

Gruss und Dank
chappy
Bitte warten ..
Mitglied: bastla
25.10.2010 um 14:58 Uhr
Hallo chappy!
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Abfrage ob Datei von heute da ist (15)

Frage von pbelcl zum Thema Batch & Shell ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...