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\"
。这样,您就不必在每次发布新版本时都在批处理文件中更新它的路径。)
我想创建一个包含以下内容的简单脚本:
"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\"
。这样,您就不必在每次发布新版本时都在批处理文件中更新它的路径。)