Войти

Показать полную графическую версию : [решено] Обработка файлов в папках при перетаскивании на BAT


TRaMeLL
11-12-2019, 19:06
Добрый день! Есть BAT файл следующего содержания:
SET ffmpeg=C:\Program Files (x86)\H.264 Encoder\ffmpeg.exe
ECHO Processing: "%~1"
:LOOP
IF "%~1"=="" GOTO :END
"%ffmpeg%" -i "%~1" -c:a copy -vn "%~1.m4a"
del "%~1"
ren "%~1.m4a" "*."
SHIFT
GOTO :LOOP
:END
На данный момент работает так: кладем BAT в папку с файлами, выделяем файлы, перетаскиваем на BAT файл. Всё работает, но хотелось бы чтобы работало и с файлами в папках (т. е. чтобы можно было перетащить на BAT файл папку с вложенными папками и файлами). Можно это реализовать?

megaloman
11-12-2019, 20:49
кладем BAT в папку с файлами »Скрипт может быть где угодно. Этого делать не надо. Пропишите расширение для Ваших обрабатываемых файлов вместо txt. Set "Ext=txt"
Я не мог полноценно отладить скрипт с Вашими программами, поэтому в выделенных строках надо убрать Echo для боевой работы - я их тупо переписал у Вас.
На скрипт можете перетаскивать файлы, папки, их смесь. Папки обрабатываются с подпапками.
@Echo Off
cls
Set "ffmpeg=C:\Program Files (x86)\H.264 Encoder\ffmpeg.exe"
Set "Ext=txt"

If "%~1"=="" (Echo No Arguments &Pause &Exit /B 2)
FOR %%f In (%*) DO (
If Exist "%%~f\" (
Echo Папка "%%~f"
For /F "usebackq delims=" %%i In (`2^>nul Dir /B /S /A:-D "%%~f"`) Do Call :DoFile "%%i"
) Else (
If Exist "%%~f" (
Call :DoFile "%%~f"
) Else (
Echo Файл или папка не найдены "%%~f"
)
)
)
pause
Exit /B 0

:DoFile
If /I Not ".%Ext%"=="%~x1" Exit /B 1
Echo Обрабатываем файл "%~1"

Echo "%ffmpeg%" -i "%~1" -c:a copy -vn "%~1.m4a"
Echo del "%~1"
Echo ren "%~1.m4a" "*."
Exit /B 0




© OSzone.net 2001-2012