Löschen von Dateien mit fast identischen Dateinamen, mit Ausnahme des letzten Wortes (Windows)

0

Ich versuche, ein Verzeichnis mit Dateien unter bestimmten Bedingungen zu sortieren, aber ich kann das für mein ganzes Leben nicht herausfinden. Hier ein kleines Beispiel einiger Dateinamen, die aussortiert (gelöscht) werden sollen.

Turok 3 - Shadow of Oblivion (USA).zip
Turok 3 - Shadow of Oblivion (Europe).zip
Duke Nukem - Zero Hour (Europe).zip
Duke Nukem - Zero Hour (USA).zip
Gex 64 - Enter the Gecko (Europe).zip
NBA Jam 2000 (Europe).zip

Ich versuche, eine Ausgabe jeder Datei zu behalten, aber es gibt einen Haken, der dies schwierig macht. In dem obigen Fall würde ich die "Gex 64" - und "NBA Jam" -Dateien behalten wollen, da sie die einzigen sind, die dort vorhanden sind. Die "Turok" und "Duke Nukem" haben jeweils zwei Ausgaben, USA und Europa, und hier möchte ich nur die Europa-Ausgaben behalten.

Ich kann das nicht manuell machen, da es sich um Tausende von Dateien handelt. Gibt es eine Software dafür oder ist die Befehlszeile leistungsfähig genug, um eine Batch-Datei dazu zu bringen?

Nick Semante
quelle
Enden alle doppelten Dateinamen mit (USA)oder (Europe)?
And31415
Nein, aber ich kann die Dateien (USA) und (Europa) in ein anderes Verzeichnis kopieren. Auf diese Weise enden alle Dateien mit diesen Tags.
Nick Semante
Sie interessieren sich also nur für solche Endungen?
And31415
Ja richtig. Vielleicht könnte ich ein einfaches Programm in Basic schreiben, aber es ist Jahre her, seit ich es benutzt habe. Wäre wirklich lieber eine einfachere Variante.
Nick Semante
Gut. Um es zusammenzufassen: Nehmen wir an, es gibt viele Dateien, die entweder mit (USA)oder enden (Europe). Einige von ihnen haben denselben Namen, obwohl sie auf eine andere Region abzielen. Eindeutige Dateien sollten auf jeden Fall aufbewahrt werden, doppelte Namen sollten jedoch so behandelt werden, dass nur die (Europe)Version erhalten bleibt. Ist das korrekt?
And31415

Antworten:

0

Batch-Skript

Das Skript kann mehrere Erweiterungen verarbeiten und verwendet standardmäßig das aktuelle Verzeichnis, wenn im ersten Parameter keine angegeben ist.

Hinweis : Das Skript listet nur die Dateien auf, die gelöscht werden sollen, löscht sie jedoch nicht. Wenn Sie sicher sind, dass die Liste korrekt ist, ersetzen Sie die REM del /f "%%~B"Zeile in der :deleteDuplicatesUnterroutine durch del /f "%%~B". Bearbeiten Sie zuerst eine Kopie, um sicherzustellen, dass keine Probleme vorliegen.

@echo off
setlocal
setlocal enabledelayedexpansion

REM ensure the target directory exists
if "%~1" == "" (
set targetDir=%~dp0
) else (
if not exist "%~1\" exit /b 2
set targetDir=%~1
)

REM set the working directory
pushd "%targetDir%"

REM set the file extensions to scan
set exts=*.zip
set preserve=^(Europe

REM initialize the name list
set nameList=%temp%\names_%random%%random%.txt

REM retrieve all file names
type nul>"%nameList%"
for /r %%G in (%exts%) do (
set name=%%~nG
set name=!name:%preserve%=$^(!
echo !name!%%~xG>>"%nameList%"
)

REM delete duplicates with similar names
call :deleteDuplicates "%nameList%"

del "%nameList%" 2>nul
popd
endlocal
echo. & pause
exit /b

:deleteDuplicates
setlocal
set tempFile=%~dp1tmp-%~nx1
sort "%~1" /o "%tempFile%"
type nul>"%~1"
set last=
for /f "delims=" %%A in (%tempFile%) do (
for /f "tokens=1 delims=$(" %%B in ('echo %%A') do (set current=%%B)
if "!current!" == "!last!" (
echo %%~A>>"%~1"
) else (
set last=!current!
))
for /f "delims=" %%A in (%~1) do (
for /f "delims=" %%B in ('"dir /b /s "%%~A" 2>nul"') do (
echo %%B
REM del /f "%%~B"
))
del "%tempFile%" 2>nul
endlocal & exit /b

Wie es funktioniert

  1. Hier finden Sie eine Liste aller Dateien der angegebenen Erweiterung passende (n), ersetzt (Europemit $(in ihren Namen.
  2. Sortieren Sie die Dateiliste alphabetisch.
  3. Erstellen Sie eine Liste ähnlicher Dateien, indem Sie deren Namen vergleichen.
  4. Listen Sie die gefundenen Duplikate auf und löschen Sie sie.

Bekannte Einschränkungen

  • Das Skript geht davon aus, dass es keine Klammern außer am Ende des Dateinamens gibt (z Something (Whatever).ext. B. ).
  • Voranstehende Leerzeichen (werden berücksichtigt.
  • Das $Zeichen ist für Sortierzwecke reserviert und sollte überhaupt nicht in Dateinamen enthalten sein.
und31415
quelle