Last active
February 21, 2019 16:38
-
-
Save jfoster/8d545df296a29fb91cf0ae7185eb67d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
setlocal DisableDelayedExpansion | |
if "%~1" EQU "/DontCheckDrapDrop" ( | |
shift | |
) else ( | |
call :IsDragDrop && ( | |
call "%~f0" /DontCheckDrapDrop %%@*%% | |
exit | |
) | |
) | |
:: Process batch file arguments as you normally do | |
setlocal EnableDelayedExpansion | |
echo cmdcmdline=!cmdcmdline! | |
endlocal | |
echo %%*=%* | |
if defined @* echo @*=%@*% | |
for %%A in (%@*%) do ( | |
ffmpeg.exe -i "%%~A" -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -c:v copy -c:a:0 copy -c:a:1 copy -c:a:2 copy -c:a:3 copy -c:a:4 copy -c:a:5 copy -c:a:6 copy "%%~nA.mp4" | |
) | |
pause | |
exit /b | |
:: IsDragDrop routine | |
:: Checks if the batch file is directly lanched through Windows Explorer | |
:: then Processes batch file arguments which are passed by Drag'n'Drop, | |
:: rebuilds a safe variant of the arguments list suitable to be passed and processed | |
:: in a batch script and returns the processed args in the environment variable | |
:: that is specified by the caller or uses @* as default variable if non is specified. | |
:: ErrorLevel: 0 - If launched through explorer. 1 - Otherwise (Will not parse arguments) | |
:IsDragDrop [retVar=@*] | |
setlocal | |
set "Esc=" | |
set "ParentDelayIsOff=!" | |
setlocal DisableDelayedExpansion | |
if "%~1"=="" (set "ret=@*") else set "ret=%~1" | |
set "Args=" | |
set "qsub=?" | |
:: Used for emphasis purposes | |
set "SPACE= " | |
setlocal EnableDelayedExpansion | |
set "cmdline=!cmdcmdline!" | |
set ^"ExplorerCheck=!cmdline:%SystemRoot%\system32\cmd.exe /c ^""%~f0"=!^" | |
if "!cmdline!"=="!ExplorerCheck!" ( | |
set ^"ExplorerCheck=!cmdline:"%SystemRoot%\system32\cmd.exe" /c ^""%~f0"=!^" | |
if "!cmdline!"=="!ExplorerCheck!" exit /b 1 | |
) | |
set "ExplorerCheck=" | |
set ^"cmdline=!cmdline:*"%~f0"=!^" | |
set "cmdline=!cmdline:~0,-1!" | |
if defined cmdline ( | |
if not defined ParentDelayIsOff ( | |
if "!cmdline!" NEQ "!cmdline:*!=!" set "Esc=1" | |
) | |
set ^"cmdline=!cmdline:"=%qsub%!" | |
) | |
( | |
endlocal & set "Esc=%Esc%" | |
for /F "tokens=*" %%A in ("%SPACE% %cmdline%") do ( | |
set "cmdline=%%A" | |
) | |
) | |
if not defined cmdline endlocal & endlocal & set "%ret%=" & exit /b 0 | |
:IsDragDrop.ParseArgs | |
if "%cmdline:~0,1%"=="%qsub%" (set "dlm=%qsub%") else set "dlm= " | |
:: Using '%%?' as FOR /F variable to not mess with the file names that contain '%' | |
for /F "delims=%dlm%" %%? in ("%cmdline%") do ( | |
set ^"Args=%Args% "%%?"^" | |
setlocal EnableDelayedExpansion | |
set "cmdline=!cmdline:*%dlm: =%%%?%dlm: =%=!" | |
) | |
( | |
endlocal | |
for /F "tokens=*" %%A in ("%SPACE% %cmdline%") do ( | |
set "cmdline=%%A" | |
) | |
) | |
if defined cmdline goto :IsDragDrop.ParseArgs | |
if defined Esc ( | |
set ^"Args=%Args:^=^^%^" | |
) | |
if defined Esc ( | |
set ^"Args=%Args:!=^!%^" | |
) | |
( | |
endlocal & endlocal | |
set ^"%ret%=%Args%^" | |
exit /b 0 | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment