Wie lösche ich Dateinamen mit ähnlichen partiellen Namen?

412
Hayley

Ich habe eine Reihe von Dateinamen, die mit einem Zeitstempel versehen sind (bis auf Nanosekunden), und ich möchte nur eine Datei pro Sekunde behalten. Hier sind zum Beispiel einige Dateinamen:

11-14-29-033.jpg 

(was bedeutet, dass die Datei um 11. Stunde, 14. Minute, 29. Sekunde und 33. Nanosekunde aufgenommen wurde).

11-14-29-602.jpg 11-14-29-839.jpg 11-14-29-953.jpg 11-14-30-406.jpg 11-14-30-847.jpg 11-14-31-091.jpg 11-14-31-419.jpg 11-14-31-667.jpg 11-14-32-364.jpg 11-14-32-619.jpg 11-14-32-913.jpg 11-14-33-150.jpg 11-14-33-485.jpg 11-14-33-708.jpg 11-14-34-052.jpg 11-14-34-336.jpg 11-14-35-174.jpg 11-14-36-563.jpg 11-14-36-788.jpg 11-14-37-278.jpg 11-14-37-584.jpg 11-14-38-050.jpg 11-14-38-841.jpg 11-14-39-196.jpg 11-14-39-736.jpg 11-14-39-870.jpg 11-14-40-091.jpg 11-14-40-766.jpg 11-14-41-052.jpg 11-14-41-676.jpg 

Gibt es eine Möglichkeit, eine Batchdatei (in Windows) zu schreiben, um jede Sekunde außer einer Datei zu entfernen?

1
Es ist möglich. Beginnen Sie mit `for` und verwenden Sie eine sortierte Ausgabe von 'dir`. Speichern Sie in der Schleife die ersten 8 Buchstaben eines Dateinamens. Wenn es wieder kommt => löschen, sonst => neues Präfix speichern. Melebius vor 6 Jahren 1
Daran ändert sich nichts im Kern der Frage, aber ich bezweifle ernsthaft den Teil "Nanosekunden". Millisekunden - das werde ich glauben. Kamil Maciorowski vor 6 Jahren 0
du hast recht Kamil Hayley vor 6 Jahren 0

1 Antwort auf die Frage

2
FatalBulletHit

Dies sollte die Arbeit erledigen:

@ECHO OFF SETLOCAL EnableDelayedExpansion  SET "source=C:\adjust\path"  FOR /R "%source%" %%F IN ("??-??-??-???.jpg") DO ( SET "file_name=%%~nF" SET "file_name=!file_name:~0,-4!" REN "%%F" "!file_name!%%~xF" >nul 2>&1 )  FOR /R "%source%" %%G IN ("??-??-??-???.jpg") DO ( DEL "%%G" )  ECHO Done^^! PAUSE 

Diese FOR /RSchleife benennt jede .jpgDatei in von HH-MM-SS-MMMbis um, HH-MM-SSindem einfach die letzten 4 Zeichen entfernt werden, es sei denn, der Dateiname ist bereits vorhanden. Der RENBefehl benennt die Datei dann nicht um und wird danach gelöscht.

Ihr Code scheint alle Dateien außer der ersten zu löschen, die in "! Dateiname! .Jpg" umbenannt wurde. In der Liste der Dateien, die ich als Beispiel angegeben habe, würden die folgenden Dateien nicht gelöscht: 11-14-29-033.jpg 11-14-30-406.jpg 11-14-31-091. jpg 11-14-32-364.jpg 11-14-33-150.jpg 11-14-34-052.jpg 11-14-35-174.jpg 11-14-36-563.jpg 11-14- 37-278.jpg 11-14-38-050.jpg 11-14-39-196.jpg 11-14-40-091.jpg 11-14-41-052.jpg Ich habe Tausende von Dateien, die ich bearbeiten kann möchte eine Datei pro Sekunde behalten und den Rest der Bilder, die in derselben Sekunde vorkommen, verwerfen. Hayley vor 6 Jahren 0
@ Hayley Ich habe es gerade auf meinem Rechner getestet (Windows 10) und es funktioniert. Ich habe es ein wenig angepasst, um Fehler zu vermeiden. Sind Sie sicher, dass Sie die Zeile `SETLOCAL EnableDelayedExpansion` im Skript haben? FatalBulletHit vor 6 Jahren 0
Du hast recht, mir fehlte die SETLOCAL EnableDelayedExpansion. Es klappt. Vielen Dank für deine Hilfe!! Hayley vor 6 Jahren 0