Мой сотрудник написал для меня сценарий, который теоретически должен удалять файлы с одинаковыми именами, независимо от их типа. В частности, он проверяет файлы mp3, m4a, wma, wav. Тем не менее, я попробовал, и он не удаляет файлы. Что-то не так со скриптом или с настройками моего компьютера?

@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

2 ответа2

0

Я не очень хорошо знаю Dos, чтобы помочь вам, но если ваша задача не требует автоматизации, вы можете обнаружить, что Duplicate Cleaner соответствует вашим потребностям.

0

Я полагаю, что может дать это как ответ

  1. В сценарии определена переменная mediaExts, но она никогда не используется. Это не просто проверка медиа-файлов, это проверка всех файлов.
  2. В процедуре CheckFile, if not exist... проверка не будет, если есть пробел. Должны быть заключены в кавычки.
  3. Цикл for в CheckFile никогда не найдет ничего для удаления, поскольку он проверяет, имеет ли переданное имя файла% 1 то же имя и расширение. Избыточный чек? Не совсем уверен.

Другими словами, скрипт ничего не удаляет, потому что он никогда не находит ничего для удаления. Зачем изобретать велосипед? Почему бы не использовать что-то подобное? http://yadfr.sourceforge.net/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .