«C: \ Users \ root \ Desktop \ %% I» добавляет переменные папки в команду - PullRequest
1 голос
/ 11 июля 2019

У меня есть простой , который я создал с помощью программного обеспечения FrameShots для захвата изображений из нескольких видеофайлов.

FOR /F %%I IN ('dir *.mp4 *.mkv /b /s') DO "C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "C:\Users\me\Videos\%%I" "C:\Users\me\Images"

Отлично работает захват изображений из каждого видеофайла, который есть в моей папке «Видео», но я не могу получить его для доступа к видео в подпапках в папке «Видео» (как я и думал /s должен достичь).

Я надеялся, что добавление /s в команду заставит FrameShots проверять не только видеофайлы в папке «Видео», но и видео в дополнительных папках внутри папки «видео» (т. Е. Папка отпуска, рабочая папка).Детская папка ...) но я ошибся.

Это очень простой файл bat:

FOR /F %%I IN ('dir *.mp4 *.mkv /b /s') DO "C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "C:\Users\me\Videos\%%I" "C:\Users\me\Images"

Я ожидал получить 10 изображений JPEG в каждом видео в папке «Видео», включая подпапки, но в настоящее время я получаю изображениятолько из файлов mp4 / mkv, которых нет в подпапках, но я хочу получать изображения из каждого файла mp4 / mkv в папке «Videos», включая все подпапки.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Если вы хотите перебрать все файлы в каталоге (включая подпапки), for /r - это путь:

@echo off

set "dir=C:\Your\Video\Directory"
set "frame=C:\Program Files (x86)\FrameShots"
set "me=C:\Users\me"

for /r "%dir%" %%A in (*.mp4 *.mkv) do (
    "%frame%\frameshots.exe" -count 10 -filetype .jpeg "%%A" "%me%\Images"

)

Я установил больше переменных, чем необходимо, чтобы было легче читать в блоке кода - вы можете установить меньше / ничего, если вам нравятся полные пути в цикле. for /r будет перебирать все файлы .mp4 и .mkv в вашем видео-каталоге (dir), устанавливать каждый из них как параметр %%A, а затем использовать этот параметр в командной строке frameshots.exe. Нет необходимости в циклическом выводе dir.

Я не знаком с FrameShots, поэтому я просто основал свой синтаксис на примерах, которые вы привели в своем вопросе, и на том основании, как я предполагаю, что они должны быть исправлены - по сути, строка будет читаться следующим образом, когда цикл повторяется:

"C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg C:\Full\Path\Of\Video\File.extension" "C:\Users\me\Images"

Ссылка: Для

0 голосов
/ 11 июля 2019

Посмотрите, поможет ли это вам:

FOR /F "Tokens=*" %%I IN ('dir "%UserProfile%\*.mp4" "%UserProfile%\*.mkv" /b /s') DO "%ProgramFiles(x86)%\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "%%I" "%USERPROFILE%\Images"

Использование DIR с / S приведет к возврату подкаталогов, но на выходе будет полный путь совпавшего файла, а не относительный путь или имя файла.

Поэтому мы можем игнорировать часть, в которой вы уже указали путь к файлу.

Далее, так как я знаю, что вы хотите искать в своем профиле пользователя, я перешел на использование переменной Windows для этого и использовал ее, чтобы явно убедиться, что поиск выполняется в правильном месте, и я использовал это также для вывода чтобы убедиться, что все фотографии созданы в папке изображений.

Так что теперь это будет работать на любом компьютере, на котором установлена ​​эта программа, а не только на вашем компьютере. :)

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