Пакетный файл для назначения пути перетаскивания для видео HandBraking
У меня есть следующий код пакетного файла для преобразования некоторых видеофайлов с помощью HandBrakeCLI:
for /R .\test %%F in (*.mp4,*.avi,*.flv,*.mov,*.3gp,*.wmv,*.mkv,*.ts) do (
HandBrakeCLI -e x264 --x264-preset medium -q 35 --crop 0:0:0:0 --aencoder copy -i "%%~fF" -o "%%~dpF%%~nF_conv.mp4"
if exist "%%~dpF%%~nF_conv.mp4" (
del "%%~fF"
ren "%%~dpF%%~nF_conv.mp4" "%%~nxF"
)
)
Чтобы применить этот код к видео, я должен скопировать пакетный файл и файл Handbrake.exe (а также его относительные папки) и вставить их в папку с именем test (в приведенном выше коде), а затем изменить имя "test" в пакетном файле. на имя этой папки, а затем запустите пакетный файл.
Не могли бы вы написать командный файл так, как мы запускаем его в произвольной папке, поэтому он запрашивает папку, содержащую видео, и мы записываем путь (или просто перетаскиваем папку в командную строку и нажимаем ввод), не перемещая файлы и переименование в "тест"?
2 ответа
Использование "%~1"
читать аргумент перетаскивания.
for /R "%~1" %%F in (etc...)
Если пакетный скрипт запускается без перетаскивания (if "%~1"==""
), вы можете использовать средство выбора папок, чтобы пользователь мог найти папку.
@if (@CodeSection == @Batch) @then
:: based on fchooser2.bat
:: https://stackru.com/a/15906994/1683264
@echo off
setlocal
if "%~1"=="" (
call :chooser dir || goto usage
) else if exist "%~1" (
set "dir=%~1"
) else goto usage
for /R "%dir%" %%F in (*.mp4,*.avi,*.flv,*.mov,*.3gp,*.wmv,*.mkv,*.ts) do (
HandBrakeCLI -e x264 --x264-preset medium -q 35 --crop 0:0:0:0 --aencoder copy -i "%%~fF" -o "%%~dpF%%~nF_conv.mp4"
if exist "%%~dpF%%~nF_conv.mp4" (
del "%%~fF"
ren "%%~dpF%%~nF_conv.mp4" "%%~nxF"
)
)
:: end main runtime. Pause if dragged-and-dropped or double-clicked.
if /i "%cmdcmdline:~0,6%"=="cmd /c" pause
goto :EOF
:chooser <var_to_set>
setlocal
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
if not "%%~I"=="" if exist "%%~I" (
endlocal & set "%~1=%%~I"
exit /b 0
)
)
exit /b 1
:usage
echo Usage: %~nx0 [directory]
goto :EOF
@end
// JScript portion
var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 0x00);
WSH.Echo(folder ? folder.self.path : '');
Вы должны создать переменную для чтения из пользовательского ввода
set /p path=Videos path :
for /R %path% %%F in (*.mp4,*.avi,*.flv,*.mov,*.3gp,*.wmv,*.mkv,*.ts) do (
HandBrakeCLI -e x264 --x264-preset medium -q 35 --crop 0:0:0:0 --aencoder copy -i "%%~fF" -o "%%~dpF%%~nF_conv.mp4"
if exist "%%~dpF%%~nF_conv.mp4" (
del "%%~fF"
ren "%%~dpF%%~nF_conv.mp4" "%%~nxF"
)
)
set /p
будет хорошо работать либо записывая путь, либо с помощью перетаскивания папки