Как я могу установить переменные в моем .bat-файле в соответствии с удаленным файлом?

Set file=C:\files\movie.mp4
Set folder=C:\files\

Я хочу изменить это, поэтому, когда я перетаскиваю файл в .bat, переменная файла меняется на путь файла, а папка меняется на родительский каталог файла.

Это возможно?

РЕДАКТИРОВАТЬ: вышеуказанная проблема была решена благодаря Keltari & DavidPostill

Теперь я столкнулся с проблемой, когда я бросил несколько файлов на .bat. Он выполняет только первый файл и не трогает остальные. Хотя это работает, если я уронил файлы один за другим.

Что я должен изменить, чтобы это работало?

Мой код

SET file=%~1
SET folder=%~dp1

ffmpeg -y -ss 120 -i "%file%" -an -c copy -bsf:v h264_mp4toannexb -f mpegts -t 00:00:010 "%folder%prev001.ts"
ffmpeg -y -ss 300 -i "%file%" -an -c copy -bsf:v h264_mp4toannexb -f mpegts -t 00:00:010 "%folder%prev002.ts"
ffmpeg -y -ss 600 -i "%file%" -an -c copy -bsf:v h264_mp4toannexb -f mpegts -t 00:00:010 "%folder%prev003.ts"

1 ответ1

1

Этот пост от StackOverflow описывает, как это сделать:

Перетаскивание плохо реализовано для пакетных файлов. Имена заключаются в кавычки, если есть пробел, но нет, если найден специальный символ, например &,; ^

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

@ECHO OFF
ECHO "%~1"
COPY "%~1" "%CD%\test\" /Y /S 
REN "%CD%\mob\*.png" "%CD%\test\test.png"
7za u -tzip "%appdata%\.virto\pack.zip" "test" -r

%~1 всегда расширяется до версии без кавычек, поэтому всегда можно цитировать их безопасным способом.

"c:\Docs and sets" -> %~1 -> c:\Docs and sets -> "%~1" -> "c:\Docs and sets" c:\Programs -> %~1 -> c:\Programs -> "%~1" -> "c:\Programs"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .