Script em lote
O script pode manipular várias extensões e será padronizado para o diretório atual se nenhum for especificado no primeiro parâmetro.
Observação Como está, o script listará apenas os arquivos que devem ser excluídos, mas não os excluirá de fato. Quando tiver certeza de que a lista está correta, substitua a linha REM del /f "%%~B"
na sub-rotina :deleteDuplicates
por del /f "%%~B"
. Trabalhe primeiro em uma cópia para garantir que não haja problemas.
@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
Como funciona
- Obtenha uma lista de todos os arquivos correspondentes à (s) extensão (ões) especificada (s), substituindo
(Europe
por$(
em seus nomes. - Classifique a lista de arquivos em ordem alfabética.
- Crie uma lista de arquivos semelhantes comparando seus nomes.
- Listar e excluir as duplicatas encontradas.
Limitações conhecidas
- O script pressupõe que não há parênteses, exceto no final do nome do arquivo (por exemplo,
Something (Whatever).ext
). - Espaços iniciais antes de
(
são levados em conta. - O caractere
$
é reservado para fins de classificação e não deve aparecer em nomes de arquivo.