поэтому я пишу скрипт для сканирования файлов mkv и преобразования любых файлов 1080p в 720p. В настоящее время я просматриваю каждый файл, используя цикл for/r для включения подпапок. Есть ли способ воссоздать подпапки в месте назначения вывода?
Вот что у меня есть на данный момент (p.s. Это мой первый скрипт):
@echo off
set mediainfo="%~dp0MediaInfo.exe"
set result="%~dp0width.txt"
set handbrake="%~dp0HandBrakeCLI.exe"
SETLOCAL ENABLEDELAYEDEXPANSION
Set /P source=Enter source path:
Set /P output=Enter destination for converted files:
if %output:~-1%==\ set output=%output:~0,-1%
if not exist %output% mkdir %output%
for /R %source% %%j in (*.mkv) do (
Echo Filepath is: %%j
%mediainfo% --Inform=Video;%%Width%% "%%j" > %result%
set /P width=<%result%
del %result%
echo Width is: !width!
if !width! == 1920 (%handbrake% -i "%%j" -o "%output%\%%~xnj" -f mkv -e x264 -q 20 --vfr -a 1,1 -E av_aac,ac3 -B 192 -w 1280 --keep-display-aspect -x level=4.1:vbv-bufsize=78125:vbv-maxrate=62500) else (echo No need to transcode.)
)
Теперь, если у меня есть структура вроде:
TV Show\Season 1
\Season 2
\Season 3
Я хотел бы, чтобы исходный каталог был «ТВ-шоу», а вывод сохранял файлы в одной и той же структуре папок. Будет ли это выполнимо?
РЕДАКТИРОВАТЬ: я немного обновил код, добавил, если указано, чтобы сравнить %%~nxq (Сезон X) минус последние 2 символа со словом «Сезон», чтобы определить, находится ли рабочая папка внутри подпапки сезона. Единственная проблема в том, что если это «Сезон 10», тогда сравнение if будет читать «Сезон». Не проверял это, и я не уверен, есть ли способ использовать подстановочные знаки в операторе if. Вот обновленный код:
@echo off
set mediainfo="%~dp0MediaInfo.exe"
set result="%~dp0width.txt"
set handbrake="%~dp0HandBrakeCLI.exe"
SETLOCAL ENABLEDELAYEDEXPANSION
Set /P source=Enter source path:
echo Source path is: %source%
Set /P a=Enter destination for converted files:
set output=%a:"=%
if not %output:~-1%==\ (set output="%output%\") else (set output="%output%")
echo Destinition path is: %output%
if not exist %output% mkdir %output%
set dest=%output%
for /R %source% %%j in (*.mkv) do (
Echo Filepath is: %%j
for %%q in ("%%~dpj.") do (
set sea=%%~nxq
if "!sea:~0,-2!"=="Season" (
set dest="%output:"=%%%~nxq\%%~xnj"
set seafold="%output:"=%%%~nxq"
if not exist !seafold! mkdir !seafold!
) else (
set dest="%output:"=%%%~xnj"
)
echo Output Path is: !dest!
)
%mediainfo% --Inform=Video;%%Width%% "%%j" > %result%
set /P width=<%result%
del %result%
echo Width is: !width!
if !width! == 1920 (%handbrake% -i "%%j" -o !dest! -f mkv -e x264 -q 20 --vfr -a 1,1 -E av_aac,ac3 -B 192 -w 1280 --keep-display-aspect -x level=4.1:vbv-bufsize=78125:vbv-maxrate=62500) else (echo No need to transcode.)
)
if
(и вы не можете использовать подстроку в метапеременной, такой как%%q
). Почему бы не использоватьif "!sea:~0,7!"=="Season " (...
? У вас все еще есть проблема с этим? Если да - в чем проблема с обновленным кодом?? - person Magoo   schedule 31.01.2016