将文件和文件夹拖放到命令批处理中

时间:2018-09-28 15:21:23

标签: batch-file

这是我在您的帮助下完成的最后一个代码。

@echo off
Title ..::RoboCoveriZer: Auto add covers to your MKV::..
Mode con cols=81 lines=9
IF "%~1"=="" Goto:Error
set mkvpredt=mkvpropedit.exe
pushd "%~1"
for %%I in ("*.mkv") DO (
"%mkvpredt%" "%%~nxI" --attachment-name "cover" --attachment-mime-type "image/jpeg" --add-attachment "%%~nI.jpg"
)
pause
exit

有什么方法可以打开命令窗口,并等待其拖放以启动该过程?

1 个答案:

答案 0 :(得分:0)

@echo off
setlocal
title ..::RoboCoveriZer: Auto add covers to your MKV::..
mode con cols=81 lines=9

set "mkvpredt=mkvpropedit.exe"

:: Get all arguments.
set input=%*

:: Get input path(s) if needed.
if not defined input set /p "input=Enter MKV path(s): "

:: Exit if no input.
if not defined input exit /b

:: Display each argument (optional code).
if defined input for %%A in (%input%) do echo input: %%A

:: Call each argument which can be a file or folder.
for %%A in (%input%) do call :step_1 "%%~A"

pause
exit /b


:step_1
:: Process a folder of MKV files or a single file.

:: Call each MKV file if pushd succeeds.
2>nul pushd "%~1" && (
    for %%A in (*.mkv) do call :step_2 "%%~A"
    popd
    exit /b
)

:: Exit if not MKV file.
if /i not "%~x1" == ".mkv" exit /b 1

:: Call single MKV file.
call :step_2 "%~1"
exit /b


:step_2
:: Coverize MKV file.
echo "%mkvpredt%" "%~f1"^
 --attachment-name "cover"^
 --attachment-mime-type "image/jpeg"^
 --add-attachment "%~dpn1.jpg"
exit /b

拖放到文件上由%*处理。 命令行参数由%*处理。 如果将%*分配给名为input的变量 如果未定义input,则使用set /p 从用户那里获取输入。用户可以 拖放或在其中键入文件或文件夹 满足set /p的窗口,然后按 返回以继续。

提供的代码可以处理操作 提到并可以处理文件和文件夹 路径。

第一个for循环传递每个参数 到call :step_1。这可以是文件或 可以包含通配符的文件夹路径 模式。

标签:step_1尝试对参数进行pushd 通过,如果成功,则循环通过 *.mkv并使用调用标签:step_2 每个文件作为参数。如果推送失败,请对待 它作为一个文件,call :step_2与 该文件作为参数。

如果:step_2

echo进行掩护 已被删除。