Identifizieren Sie das Muster anhand des Stapels

697
hailbreno

Ich habe ein Skript, das Dateien umbenennt, indem dem aktuellen Dateinamen ein Zeitstempel als Präfix hinzugefügt wird. Eine Datei mit einem Zeitstempel sieht folgendermaßen aus:

20170407_1030.file1.txt 

Ich führe dieses Skript in einem Ordner aus, nachdem ich mit einigen Dateien gearbeitet habe. Das Problem ist, dass, wenn einer Datei bereits ein Zeitstempel vorangestellt wurde, beim nächsten Ausführen des Skripts ein weiterer Zeitstempel vor dem Dateinamen steht. Wenn eine Datei bereits einen Zeitstempel im Namen hat, möchte ich sie durch einen aktualisierten Zeitstempel ersetzen .

Um dies zu erreichen, versuche ich, Dateinamen zu identifizieren, die bereits einen Zeitstempel enthalten. Wenn ja, ersetzen Sie ihn durch einen aktualisierten Zeitstempel.

Mein Skript dazu sieht momentan so aus:

setlocal enabledelayedexpansion  for /f "delims=|" %%F in ('dir /b %cd%\*.*') do ( set "MDate=%%~tF" set "Patern=*_*." set "TimeStamp=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!" ren "%%~nF%%~xF" "!TimeStamp!-%%~nF%%~xF"  ) exit 

Edit: Entschuldigung, dass ich keine weiteren Details angegeben habe. Ich habe einige Nachforschungen angestellt und kann keine Möglichkeit finden, Masken in der angegebenen Stichprobe abzugleichen. Ich kann vordefinierte Muster ersetzen oder Masken wie anpassen ren *.png *.jpg.

1
Danke, dass Sie uns gesagt haben, was Sie tun möchten. Hast du eine Frage? Und wenn Sie Fragen haben, zeigen Sie uns, was Sie zuerst probiert haben! :) Es hilft, so dass wir keine Antworten geben, die Sie bereits versucht haben. Wenn Sie nichts unternommen haben, bereiten Sie sich auf die Abstimmungen vor! Das Basisprotokoll * kann jedoch die Anzahl der Perioden sein. Wenn nicht, ist Ihre Frage nicht klar, da Sie nicht genügend Details angeben. Unabhängig davon, bis Sie [Ihre Frage bearbeiten] (https://superuser.com/posts/1225592/edit) gewählt haben, habe ich zum Schließen gestimmt. Es tut uns leid Dave vor 6 Jahren 2
SuperUser ist auch keine Site "Bitte schreibe mir ein Skript". Teilen Sie Ihre Forschung mit und wir helfen Ihnen dabei herauszufinden, warum Dinge nicht so funktionieren, wie sie es tun. LPChip vor 6 Jahren 1
Weitere Infos hinzugefügt. hailbreno vor 6 Jahren 0
Ihre "Frage" ist auch nach der Bearbeitung immer noch klar. Ich kann nicht interpretieren * "Ich möchte Dateinamen identifizieren, die bereits einen Zeitstempel enthalten, und dann aktualisieren." * dbenham vor 6 Jahren 0
Sorry, bitte sehen, ob es jetzt klar genug ist :) hailbreno vor 6 Jahren 0

1 Antwort auf die Frage

2
LotPings
@Echo off Pushd "X:\path\to\workdir"  :: Get current date time  For /f "delims=." %%A in ( 'wmic os get LocalDateTime^|findstr ^^[0-9]' ) do Set DT=%%A Set "DT=%DT:~0,8%_%DT:~8,4%"  For /f "tokens=1* delims=." %%A in ( 'Dir /B/A-D "20*_*.*.txt"^|findstr "^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\." ' ) do Echo ren "%%A.%%B" "%DT%.%%B" 

Wenn die Ausgabe in Ordnung ist, entfernen Sie das Echo in der letzten Zeile.

Beispielausgabe:

> SU_1225592.cmd ren "20170704_1656.File1.txt" "20170704_1700.File1.txt" ren "20170704_1656.File2.txt" "20170704_1700.File2.txt" 

Bearbeiten Um eine Datei einfach auf das Vorhandensein eines date_time-Musters zu prüfen, können
Sie diesen Batch verwenden, der nur den von findstr zurückgegebenen Errorlevel verwendet
, um bei Erfolg die Ausführung eines Befehls zu starten &&oder ||verschiedene Befehle fehlschlagen .

@Echo off Set "Pattern=^20[0-9][0-9][01][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9]\." For %%A in ("%CD%\*") Do Echo:%%~nA|findstr "%Pattern%">NUL 2>&1 && ( Echo found Pattern in %%~fA ) || ( Echo No Pattern in %%~fA ) 

Beispielausgabe:

No Pattern in A:\Copy+Archive.cmd No Pattern in A:\SU_1225592.cmd found Pattern in A:\20170704_1656.File1.txt found Pattern in A:\20170704_1656.File2.txt No Pattern in A:\tp010387.BAT 
Obwohl dies nicht die Antwort ist, nach der ich gesucht habe, führte sie mich direkt zur Lösung. Vielen Dank. hailbreno vor 6 Jahren 0