Параметр "-tmp" в MP4Box требует 2 обратных слеша

275
Derp

Я нахожусь на Windows 7 Ultimate SP1 x64, работает MP4Box - GPAC версии 0.7.2-DEV-rev357-g7115eeb8-master.

Я создал BAT-файл следующим образом:

mp4box -add %1#trackID=1:name= -add %2#trackID=1:name= -tmp "%~dp1\" -new "%~n1_new.mp4" 

который отлично работает, но перед добавлением \к %~dp1\нему выдает ошибку:

Error - 2 input names specified, please check usage 

Зачем ему нужно 2 обратных слеша для работы?

Если это важно, я просто перетаскиваю видео и аудио в BAT-файл.

Кстати, все в %1#trackID=1:name=порядке или я должен изменить это на это "%~1#trackID=1:name="?

0

1 ответ на вопрос

0
Pimp Juice IT

Чтобы это исправить, вы можете использовать подстроки пакетных переменных, чтобы заменить одиночные символы обратной косой черты \в строковом значении первого аргумента \\вместо двух символов обратной косой черты в этом строковом значении. Вы можете использовать setдругую переменную, чтобы иметь новое значение и использовать его соответственно.


Пакетный скрипт

@ECHO OFF SET a=%~1 SET a=%a:\=\\% SET dp=%~dp1 SET dp=%dp:\=\\%  mp4box -add %a%#trackID=1:name= -add %2#trackID=1:name= -tmp "%dp%" -new "%~n1_new.mp4" ::::mp4box -add %1#trackID=1:name= -add %2#trackID=1:name= -tmp "%dp%" -new "%~n1_new.mp4" 

Примечание . Проблема, вероятно, заключается в том, что mp4boxприложение ожидает, что в полных путях будет использоваться либо двойная обратная косая черта, \\либо одиночная прямая косая /черта, так как символ обратной косой черты является escape-символом, который он использует для внутренних целей, и, таким образом, при использовании одной обратной косой черты он не видит обратную косую черту буквально.

Вы можете использовать его для проверки, использует ли он как прямые, так и двойные обратные слэши.

SET a=%~1 SET a=%a:\=/% SET dp=%~dp1 SET dp=%dp:\=/% 

Дополнительные ресурсы

Большое спасибо за объяснения и ссылки, они были образовательными. Я просто хотел знать, почему в конце понадобилось 2 обратных слеша, так что теперь, если я правильно понимаю, последний обратный слэш экранируется (\ "), поэтому мне нужно добавить еще один обратный слеш. Как насчет второго вопроса? Знаете ли вы какой? лучше ? Derp 5 лет назад 0
@Derp Я бы посоветовал всегда использовать `% ~ 1`, а затем обязательно заключать переменную в двойные кавычки, чтобы она правильно обрабатывала пробелы в именах файлов или пути к папкам. Поэтому, если имя файла `test 123.txt`, вы будете использовать` "% ~ 1" `, поэтому оно будет возвращено как` "test 123.txt" `... вам, очевидно, нужно понять параметры приложения, которые вы используете, и как это интерпретируется и, таким образом, пример `"% ~ 1 # trackID = 1: name = "`, который вы показали, был бы лучшим, на мой взгляд. Использование тильды и заключение в двойные кавычки никогда не вызывало у меня проблем, тогда как использование значения без пробелов в нем не имеет. Pimp Juice IT 5 лет назад 0