O script de exclusão duplicado não faz nada

0

Um associado meu escreveu um script para mim que, teoricamente, deve excluir arquivos que tenham o mesmo nome, independentemente do tipo de arquivo. Especificamente, ele verifica arquivos mp3, m4a, wma, wav. No entanto, eu tentei e não exclui nenhum arquivo. Há algo de errado com o script ou com as configurações do meu computador?

@Echo Off
Rem CMD file to look for duplicate media files and delete them.
Rem 1. x.y & x (1).y etc.
Rem 2. x.y and x.z
Rem
Rem Calling: %0 <Directory>
Rem
Rem Defaults to current directory if <directory> is not specified.

Rem Save environment and enable local extensions
SetLocal
SetLocal EnableExtensions EnableDelayedExpansion

Rem Set media extensions to check in priority sequence i.e. later extension will be deleted if earlier extension exists
Set mediaExts=.mp3,.m4a,.wma,.wav

Rem Get media directory
Set mediaDir=%1
If .%1 == . Set mediaDir="%CD%"

Rem Loop through media files
For /R %mediaDir% %%f In (*.*) Do Call :checkFile %%f
Pause
Goto :eof

:checkFile
Rem If file has been deleted in a previous loop then skip
If Not Exist %1 Goto :eof

Rem Check for name (*).ext etc. and delete if found
For %%d In ("%~dpn1 (*)%~x1") Do (
    Echo Deleting "%%d" because "%1" exists.
    If Not %1 == %%d Del /f "%%d"
)

Rem Check for alternative audio files
Set found=
For %%x In (%mediaExts%) Do (
    If Exist "%~dpn1%%x" (
        If .!found!==. (
            Set found=%~dpn1%%x
        ) Else (
            Echo Deleting "%~dpn1%%x" because "!found!" exists.
            Del /f "%~dpn1%%x"
        )
    )
)

Goto :eof
    
por 123 05.02.2014 / 21:38

2 respostas

0

Eu não sou suficientemente fluente em Dos para ajudá-lo, mas se sua tarefa não precisar de automatização, você pode descobrir que O limpador duplicado atende às suas necessidades.

    
por 05.02.2014 / 21:51
0

Acho que isso também pode dar uma resposta.

  1. O script tem uma variável mediaExts definida, mas nunca é usada. Não é só verificar arquivos de mídia, está checando todos os arquivos.
  2. Na rotina CheckFile, a verificação if not exist... falharia se houvesse um espaço. Deve ser colocado entre aspas.
  3. O loop for no CheckFile nunca encontrará nada para excluir porque verifica se o nome do arquivo transmitido% 1 possui o mesmo nome e extensão. Cheque redundante? Não tenho certeza.

Em outras palavras, o script não está excluindo nada porque nunca encontra nada para excluir. Por que reinventar a roda? Por que não usar algo assim? link

    
por 05.02.2014 / 23:01