Batchfile, string mit findstr suchen und Dateiname erhalten, wo string vorkommt
Hi Leute,
habe in "c:\ordner" viele .json Dateien.
Mit folgendem Code kann ich prüfen, ob das aktuelle Tagesdatum enthalten ist, das wäre heute gemäß folgender Definition z. B. dann "2023-01-31"
Das funktioniert soweit. ABER:
Ich brauche für die weitere Verarbeitung eine Ausgabe von dem Dateinamen, in welchem der String gefunden wurde. Falls der String in mehreren Dateien gefunden wurde, am besten die neueste Datei.
Hat jemand einen Tipp?
habe in "c:\ordner" viele .json Dateien.
Mit folgendem Code kann ich prüfen, ob das aktuelle Tagesdatum enthalten ist, das wäre heute gemäß folgender Definition z. B. dann "2023-01-31"
set yyyymmdd=%date:~6,4%-%date:~3,2%-%date:~0,2%
findstr /m "%yyyymmdd%" c:\ordner\*.json
Das funktioniert soweit. ABER:
Ich brauche für die weitere Verarbeitung eine Ausgabe von dem Dateinamen, in welchem der String gefunden wurde. Falls der String in mehreren Dateien gefunden wurde, am besten die neueste Datei.
Hat jemand einen Tipp?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52508976157
Url: https://administrator.de/forum/batchfile-string-mit-findstr-suchen-und-dateiname-erhalten-wo-string-vorkommt-52508976157.html
Ausgedruckt am: 22.12.2024 um 16:12 Uhr
19 Kommentare
Neuester Kommentar
@echo off
set yyyymmdd=%date:~6,4%-%date:~3,2%-%date:~0,2%
for /f "delims=" %%a in ('findstr /lm "%yyyymmdd%" "c:\ordner\*.json"') do echo %%a
Oder gleich mit der Kraft-Muschel
Get-ChildItem "c:\ordner\*.json" -File | sort LastWriteTime -Descending | Select-String -Pattern (Get-Date -F "yyyy-MM-dd") -SimpleMatch | select -First 1 -ExpandProperty Path
funktioniert leider nicht ->
Klappt hier im Test ohne Probleme, hast du einen Fehler beim Kopieren oder Anpassen gemacht Am liebsten hätte ich als Ergebnis eine Variable, welche als Wert den Dateinamen enthält, in welchem der gesuchte String vorkommt.
Einfach statt dem echo am Ende ein set mit deiner Variablen benutzen in %%a steht der Name ja ergo hast du ja eigentlich schon eine Variable 🙃............ do set "myvar=%%a"
path=c:\ordner
Autsch niemals den Namen path als Variable überscheiben ! Denk mal nach warum .https://ekiwi-blog.de/19215/path-variable-in-windows-konfigurieren-und-b ...
Ach ja noch vergessen, falls es mehrere Dateien gibt nimmt das hier immer die neueste (nach Dateidatum)
@echo off
set yyyymmdd=%date:~6,4%-%date:~3,2%-%date:~0,2%
set "ordner=c:\ordner"
set "newest="
for /f "delims=" %%a in ('dir /b /a-d /o-d "%ordner%\*.json"') do findstr /l "%yyyymmdd%" "%ordner%\%%a" >nul && (if not defined newest set "newest=%ordner%\%%a")
echo %newest%
Sie soll aber einen anderen Namen bekommen, sagen wir "datei.json".
https://winscp.net/eng/docs/scriptcommand_putput <file> [ [ <file2> ... ] <directory>/[ <newname> ] ]
............ "put %newest% ./datei.json" "exit"
Freitag ist erst übermorgen, steht doch oben! Das Ding da auf dem Hals hat im Normalfall eine Funktion
Moin,
Warum so kompliziert?
gibt das gewünschte Ergebnis zurück. OK, muss noch auf die jüngste Datei gefiltert werden.
Liebe Grüße
Erik
Zitat von @abamakabra:
Get-ChildItem "c:\ordner\*.json" -File | sort LastWriteTime -Descending | Select-String -Pattern (Get-Date -F yyyyMMdd) -SimpleMatch | select -First 1 -ExpandProperty Path
Warum so kompliziert?
get-childitem *.json -filter *$(get-date -format "yyMMdd")* -file
gibt das gewünschte Ergebnis zurück. OK, muss noch auf die jüngste Datei gefiltert werden.
Liebe Grüße
Erik
Warum so kompliziert?
Weil ich es so verstanden habe das das aktuelle Datum innerhalb der Dateien enthalten sein soll nicht im Dateinamendas hat er ja mit
findstr /m "%yyyymmdd%" c:\ordner\*.json
im Ursprungspost schon gemacht, findstr sucht hier in den Dateien. Ob die Datumsangaben im Dateinamen dazu korrelieren kann nur er sagen, im Ursprungspost stand nicht das Datumsangaben im Dateinamen stehen.Zitat von @anarchator:
hab doch noch eine Frage:
Angenommen, in keiner der Dateien findet sich der genannte String.
Dann soll der Upload mit winscp.com einfach geskipped werden.
Wie erzielt man das?
hab doch noch eine Frage:
Angenommen, in keiner der Dateien findet sich der genannte String.
Dann soll der Upload mit winscp.com einfach geskipped werden.
Wie erzielt man das?
if not defined newest (
echo Keine Datei gefunden
goto :eof
)
Zitat von @abamakabra:
das hat er ja mit
Warum so kompliziert?
Weil ich es so verstanden habe das das aktuelle Datum innerhalb der Dateien enthalten sein soll nicht im Dateinamendas hat er ja mit
findstr /m "%yyyymmdd%" c:\ordner\*.json
im Ursprungspost schon gemacht, findstr sucht hier in den Dateien. Ob die Datumsangaben im Dateinamen dazu korrelieren kann nur er sagen, im Ursprungspost stand nicht das Datumsangaben im Dateinamen stehen.Achso. Das habe ich anders verstanden.