好的,我有这个脚本,它用ffmpeg进行批量编码。它基本上为每个文件调用 ffmpeg。我想做的是让脚本在开始执行之前询问输入和输出位置。
以下是原始脚本:
for %%a in ("*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "newfiles%%~na.mp4"
现在我希望能够输入一个字符串,其中包含第一个括号("*.mp4")中的文件位置,末尾为"newfiles\%%~na.mp4"。
我假设 %%~na 用于生成数字订单或其他东西,但我不完全确定。
我假设需要创建两个变量/字符串,然后通过从键盘读取来使用。可悲的是,我对此完全没有经验。在学校做了一些C ++,但仅此而已。
提前谢谢。
您可以查询用户的文件夹名称并将其添加到前面,如下所示:
@echo off
set /p fromfolder="Enter search folder: "
set /p tofolder="Enter destination folder: "
for %%a in ("%fromfolder%*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "%tofolder%%%~na.mp4"
%~nI
(其中I
是可变的,在您的情况下a
)将执行以下操作:expands %I to a file name only
(有效地从路径的文件名部分中删除文件扩展名)。在.BAT文件中使用时,您需要使用 %%
而不是 %
.
如果键入for /?
,您将获得有关 for-命令的帮助。它将解释如何使用该命令,以及如何使用变量替换。此处包含部分for /?
以便于参考:
此外,还增强了 FOR 变量引用的替换功能。现在,您可以使用以下可选语法: %~I - 展开 %I 删除所有括起来的引号 (") %~fI - 将 %I 扩展为完全限定的路径名 %~dI - 仅将 %I 扩展为驱动器号 %~pI - 仅将 %I 扩展为路径 %~nI - 仅将 %I 扩展为文件名 %~xI - 仅将 %I 扩展为文件扩展名 %~sI - 扩展路径仅包含短名称 %~aI - 将 %I 展开为文件的文件属性 %~tI - 将 %I 展开为文件的日期/时间 %~zI - 将 %I 扩展为文件大小 %~$PATH:I - 搜索 PATH 中列出的目录 环境变量并将 %I 扩展到 找到的第一个完全限定的名称。 如果环境变量名称不是 定义或文件未被 搜索,然后此修饰符展开为 空字符串修饰符可以组合以获得复合结果: %~dpI - 仅将 %I 扩展为驱动器号和路径 %~nxI - 仅将 %I 扩展为文件名和扩展名 %~fsI - 将 %I 扩展为仅包含短名称的完整路径名 %~dp$PATH:I - 搜索路径中列出的目录 %I 的环境变量并扩展到 找到的第一个驱动器号和路径。 %~ftzaI - 将 %I 扩展为类似于 DIR 的输出行在上面的例子中,%I和PATH可以用其他有效的值。 %~ 语法由有效的 FOR 变量名称终止。选择大写变量名称(如 %I)使其更具可读性和避免与不区分大小写的修饰符混淆。
我想指出的是,通常命令行命令采用参数而不是查询用户的输入。您可以将此与要求用户输入相结合。
@echo off
set fromfolder=%1
set tofolder=%2
REM Remove "" from folder names
set fromfolder=%fromfolder:"=%
set tofolder=%tofolder:"=%
REM Ask user if cmd line parameters not provided
IF [%fromfolder%] == [] set /p fromfolder="Enter source folder: "
IF [%tofolder%] == [] set /p tofolder="Enter destination folder: "
echo Source folder: %fromfolder%
echo Destination folder: %tofolder%
REM Execute command
for %%a in ("%fromfolder%*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "%tofolder%%%~na.mp4"
REM Unset
set fromfolder=
set tofolder=
执行方式:script.bat "folder1" "folder2"
文件夹名称两边的"仅在包含空格的情况下才需要。