Windows 上的简单 "SendTo" 脚本

Simple "SendTo" script on Windows

我想创建一个包含以下内容的简单脚本:

"C:\Users\Professional\NVEncC_5.24_x64\NVEncC64.exe" --codec h265 --preset quality --profile main10 --tier high -i "Project.mkv" -o "Project-Q27.mkv"

我可以通过右键单击 => SendTo 到达。

我知道我需要将文件命名为 XXX.bat 并将其粘贴到 SendTo 文件夹中。

但我不知道如何获取文件名以将其动态添加到脚本而不是“Project.mkv”。

你能帮帮我吗?

谢谢!

K.

要获取 PowerShell .ps1 脚本的名称 运行,您可以使用来自 MyInvocation 的以下命令:

$MyInvocation.MyCommand 这将 return .ps1 文件对象。

要仅获取名称字符串,您可以 运行: $MyInvocation.MyCommand.Name

包含以下内容的 .bat 文件应该可以工作。

"C:\Users\Professional\NVEncC_5.24_x64\NVEncC64.exe" --codec h265 --preset quality --profile main10 --tier high -i "%~f1" -o "%~n1-Q27.mkv"

pause

我还添加了暂停,这样您就可以看到如果它很快但可以删除会发生什么。

%~f1 是您右键单击并在其上使用“SendTo”(扩展为完整路径)的文件的参数。 %~n1-Q27.mkv" 本质上与参数 %~f1 相同,但没有文件扩展名,它会将 -Q27.mkv 添加到文件名中。

因此,如果您在名为 Funny.mkv 的文件上正确 click/SendTo/yourbat.bat,则命令 (NVEncC64.exe) 将在该文件上 运行 并输出到名为Funny-Q27.mkv.

我建议你在测试前备份你的文件,这样你就不会错误地覆盖任何现有文件。

虽然@notjustme 提供的答案有效,但我有一点补充:输出变量应该包括传递给批处理文件的文件名的驱动器和路径,以便在与源文件相同的目录。

"C:\Users\Professional\NVEncC_5.24_x64\NVEncC64.exe" --codec h265 --preset quality --profile main10 --tier high -i "%~f1" -o "%~d1%~p1%~n1-Q27.mkv"

pause

右键单击时传递的文件名 --> SendTo --> your_batch_file.cmd 被引用为 %1 或第一个参数。因为它是一个文件名,所以它可以被解析并进一步扩展成它的部分。 正如@notjustme 所提到的:

  • %~f1 将 %1(传递的文件名)扩展为其完全限定的路径名​​
  • %~n1 仅将 %1 扩展为其文件名 但还有:
  • %~d1 将 %1 扩展为其驱动器号
  • %~p1 将 %1 扩展为其完整路径
  • %~x1 仅将 %1 扩展为其文件扩展名

如果不将%~d1%~p1添加到输出文件变量中,默认情况下,转码后的文件不会与源文件在同一目录中创建 ;相反,它将在您的批处理文件所在的目录中创建。

(此外,考虑到 rigaya 使用 NVEncC 的开发 windows 相当短,您可能希望将它安装到不包含版本控制的更通用的目录中,例如 "C:\Users\Professional\NVEncC\" 而不是"C:\Users\Professional\NVEncC_5.24_x64\"。这样,您就不必在每次发布新版本时都在批处理文件中更新它的路径。)