Jak usunąć nazwy plików o podobnej częściowej nazwie?

1

Mam kilka nazw plików, które są oznaczone znacznikiem czasu (aż do nanosekund) i chcę zachować tylko jeden plik na sekundę. Oto na przykład niektóre nazwy plików:

11-14-29-033.jpg

(co oznacza, że ​​plik został nagrany o godzinie 11, 14, 29, 29 i 33 nanosekundie).

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

Czy istnieje sposób, w jaki mogę napisać plik wsadowy (w systemie Windows), aby usunąć wszystkie pliki oprócz 1 na sekundę?

Hayley
źródło
1
To jest możliwe. Zacznij od for, użyj posortowanego wyjścia dir. W pętli zapisz pierwsze 8 liter nazwy pliku. Gdy pojawi się ponownie => usuń, w przeciwnym razie => zapisz nowy prefiks.
Melebius
Nie zmienia to niczego w istocie pytania, ale poważnie wątpię w część „nanosekundową”. Milisekundy - w to uwierzę.
Kamil Maciorowski
masz rację Kamil
Hayley

Odpowiedzi:

2

To powinno wykonać zadanie:

@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

Ta FOR /Rpętla będzie zmienić nazwę każdego .jpgpliku do od HH-MM-SS-MMMdo HH-MM-SSpo prostu usuwając ostatnie 4 znaki, chyba że nazwa pliku już istnieje. RENKomenda nie będzie zmienić nazwę pliku i następnie będzie się usuwać później.

FatalBulletHit
źródło
Twój kod wydaje się usuwać wszystkie pliki oprócz pierwszego, którego nazwa została zmieniona na „! Nazwa_pliku! .Jpg”. Na liście plików, które podałem jako przykład, poniższe pliki to te, które nie zostaną usunięte: 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 Mam tysiące plików do przetworzenia i mam chcesz zachować jeden plik na sekundę i odrzucić pozostałe obrazy, które występują w tej samej sekundzie.
Hayley,
@Hayley Właśnie przetestowałem to na moim komputerze (Windows 10) i działa. Poprawiłem to trochę, aby uniknąć błędów. Czy na pewno masz wiersz SETLOCAL EnableDelayedExpansionw skrypcie?
FatalBulletHit
Masz rację, brakowało mi SETLOCAL EnableDelayedExpansion. To działa. Wielkie dzięki za Twoją pomoc!!
Hayley,