Удаление файла «sample.ext.ext2», с которым не связан файл «sample.ext» - PullRequest
0 голосов
/ 11 декабря 2011

Приложение создает .mta файлы (с одинаковым именем) всех мультимедийных файлов на моем жестком диске. Что я хочу сделать, это проверить все подпапки корневой папки, если нет мультимедийного файла, связанного с каким-либо .mta, а затем удалить его.

Подробный пример. Допустим, у нас есть файлы

01.mp3
01.MP3.mta
02.mkv
02.MKV.mta
03.jpg
03.JPG.mta
04.MP4.mta     <<==

Как видите, последний .mta не имеет оригинального файла. Я хочу удалить последний файл.

Я не знаю, возможно ли это с помощью cmd. Но следующая функция не работает. Пожалуйста, посмотрите

For /r %%i in (*.mta) do call :nomta %%i
pause

goto end

:nomta
set stem=%1:.mta=%

set original=%stem%.mta
if not exist %original% do exit /B
if not exist %stem% do del /a /Q  %1

goto :EOF 

:end

echo done
PAUSE

1 Ответ

0 голосов
/ 11 декабря 2011

Вы можете использовать команду for, чтобы сделать это с dir /a, передавая ему как скрытые, так и не скрытые имена файлов.Вот пример:

C:\temp\z\z>attrib *
A            C:\temp\z\z\foo.bar.mta
A   H        C:\temp\z\z\h2.mp4.mta
A            C:\temp\z\z\hid.mp4
A   H        C:\temp\z\z\hid.mp4.mta
A            C:\temp\z\z\zoo.bar
A            C:\temp\z\z\zoo.bar.mta

C:\temp\z\z>for /f %F in ('dir /b/a *.mta') do if not exist "%~nF" echo %F >> z

C:\temp\z\z>type z
foo.bar.mta
h2.mp4.mta

, поэтому замена эха на del должна достичь вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...