Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выполнить действие для текущего файла

Ответить
Настройки темы
CMD/BAT - [решено] Выполнить действие для текущего файла

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день.
Помогите пожалуйста.

Имеется BATник выполняющий функцию слияния одноименных файлов звука .m4a и видео .mp4, например луна.mp4 склеится с луна.m4a на выходе будет луна.mkv
Код: Выделить весь код
@ECHO OFF
for %%f in ("*.mp4") do mkvmerge.exe --output "%%f.mkv" ( "%%~nf.m4a" ) --no-audio --no-subtitles --no-attachments ( "%%f" ) --track-order 1:0,0:0
:end
Для того чтоб сработало, BATник всегда лежит в папке с этими файлами.

Очень бы хотелось сделать удаленно лежащий батник, и для него ярлык положить например в папку контекстного меню "Отправить...".
Т.е. чтоб правой кнопкой например по видеосодержащему файлу .mp4 ПКМ - Отправить - Батник и пошел процесс слияния даже если батник не лежит в текущей папке.

Если я сильно много хочу, то как вариант мне также нормальным кажется временное копирование батника в папку с текущим файлом, для которого я сделал ПКМ - Отправить - БАТник.
Т.е. лежит батник с вышеуказанным кодом на диске "c:\Program Files\K-Lite Codec Pack\Filters\ffmpeg\mkv.bat"
Ярлык для него лежит в "c:\Users\Пользователь\AppData\Roaming\Microsoft\Windows\SendTo\mkv.ink"

По случайному файлу, лежащему например в D:\Temp2\луна.mp4 (само собой и аудио файл скорее всего там лежит луна.m4a), ПКМ - Отправить - Батник
- батник копирует получается сам себя mkv.bat в эту папку с файлом (папку чтоб определяло просто как текущую, а не именно D:\Temp2\)
- выполняется
- самоудаляется из текущей папки

Отправлено: 11:47, 19-09-2020

 

Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


A555555,
Код: Выделить весь код
@Echo Off
cls
Pushd %1 ||(Echo Folder "%~1" not correct &Pause &Exit /B 2)
	CD
	for %%f in ("*.mp4") do mkvmerge.exe --output "%%f.mkv" ( "%%~nf.m4a" ) --no-audio --no-subtitles --no-attachments ( "%%f" ) --track-order 1:0,0:0
Popd
Exit /B
На этот батник сделайте ярлык, например, на рабочем столе и затягивайте на него мышкой нужную папку.
Вашу строку никак не тестировал.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:41, 19-09-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman
Очень круто.
Можно перетягивать папку, а можно как я и хотел через контекстное "Отправить" тоже по нужной папке.

Отправлено: 14:18, 19-09-2020 | #3


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата A555555:
По случайному файлу, лежащему например в D:\Temp2\луна.mp4 (само собой и аудио файл скорее всего там лежит луна.m4a), ПКМ - Отправить »
Код: Выделить весь код
Param(
    $mkvmerge = 'C:\soft\mkvmerge.exe'
)cls

reg add HKLM\SOFTWARE\Classes\*\shell\MKVmerge\command /d "powershell.exe gci *.mp4|%%{`$mkv=`$_.Name -replace'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order 1:0,0:0}" /f
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:46, 20-09-2020 | #4


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg screen__.jpg
(95.9 Kb, 11 просмотров)

Fors1k
ошибка по всей видимости
http://forum.oszone.net/attachment.p...1&d=1600632291

ПКМ по mp4 файлу к которому нужно приклеить одноименную m4a, выбираю новый пункт mkvmerge в меню.

Отправлено: 23:06, 20-09-2020 | #5


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Запустил еще раз у себя. Работает без проблем.
Покажите вывод команды:
Код: Выделить весь код
$host.Version
И вот этой:
Код: Выделить весь код
cls
reg query HKLM\Software\Classes\*\shell\MKVmerge\command /ve

Отправлено: 13:06, 21-09-2020 | #6


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Fors1k

Цитата Fors1k:
Покажите вывод команды: »
Код: Выделить весь код
C:\Users\ПОЛЬЗОВАТЕЛЬ>$host.Version
"$host.Version" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Цитата Fors1k:
И вот этой: »
Код: Выделить весь код
C:\Users\ПОЛЬЗОВАТЕЛЬ>reg query HKLM\Software\Classes\*\shell\MKVmerge\command /ve

HKEY_LOCAL_MACHINE\Software\Classes\*\shell\MKVmerge\command
    (по умолчанию)    REG_SZ    powershell.exe gci *.mp4|%{`$mkv=`$_.Name -repla
ce'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$
mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order
1:0,0:0}

Отправлено: 19:25, 21-09-2020 | #7


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Вставьте и выполните код из моего первого сообщения в powershell, а не в cmd. Тогда все заработает. Только измените путь к mkvmerge.exe .

Отправлено: 19:59, 21-09-2020 | #8


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Fors1k
Мне не хватает мозгов, чтоб вашу мысль уловить.
Мои исходные данные.
mkvmerge.exe через переменные среды системы прописан в Системные переменные строка Path. Путь там с русскими буквами и пробелами.
В вашем коде путь на свой сменил, взяв путь в обычные двухчерточные кавычки.

Запускал ваш код, и привел скрин ошибки из PowerShell. Сейчас ошибка сохраняется.

Последний раз редактировалось A555555, 21-09-2020 в 21:46.


Отправлено: 20:45, 21-09-2020 | #9


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата A555555:
Мне не хватает мозгов, чтоб вашу мысль уловить. »
Нажмите Win+R.
Напишите там powershell, нажмите Enter.
В открывшееся окно вставьте код, предварительно изменив в нем путь.
Код: Выделить весь код
Param(
    $mkvmerge = 'C:\soft\mkvmerge.exe'
)cls

reg add HKLM\SOFTWARE\Classes\*\shell\MKVmerge\command /d "powershell.exe gci *.mp4|%%{`$mkv=`$_.Name -replace'[^\.]+$', 'mkv';`$m4a=`$_.Name -replace'[^\.]+$', 'm4a';$mkvmerge --output `$mkv (`$m4a) --no-audio --no-subtitles --no-attachments (`$_.name) --track-order 1:0,0:0}" /f
Готово, все должно работать.

Отправлено: 21:32, 21-09-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выполнить действие для текущего файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Выполнить действие при наличии определенных файлов в папках alexfeel30 Скриптовые языки администрирования Windows 1 03-03-2019 22:18
2007 - [решено] Excel. В зависимости от цвета заливки выполнить действие. vlad20 Microsoft Office (Word, Excel, Outlook и т.д.) 1 27-08-2012 14:21
Выполнить действие по отсутствию цвета deffol AutoIt 3 14-08-2011 01:32
Как получить имя текущего пользователя для использования его в имени файла Denchik Автоматическая установка Windows 2000/XP/2003 1 25-01-2006 22:33




 
Переход