如何添加右键单击选项以使用所选文件名搜索网络?
How do I add a right-click option to search the web using a selected file's name?
我想在 Windows Explorer 中的右键单击菜单中添加一个选项,它将启动 Chrome 并在特定站点中搜索该文件的名称。更具体一点,我希望能够在视频文件上执行此操作,然后为其寻找可用的字幕。我知道有很多程序可以做一些变化,但是在尝试了很多之后,我还没有完全找到我想要的东西。不仅如此,我宁愿使用一些轻量级的本机代码,也不愿安装另一个程序。
我找到的最接近指南的是 in this post,但它不太管用。当然,我已经尝试根据我的需要清理它,但它仍然不起作用,所以我认为那里有一个缺陷。这是我目前所拥有的...
运行 命令提示符作为管理员,我执行了这两行以将它们添加到注册表中:
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search" /d "Subtitle Search"
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "C:\My Projects\My Code\SubtitleSearch.bat ""%1"""
然后,我创建了一个批处理文件 (SubtitleSearch.bat),内容如下:
set xGOOGLESEARCH=%~nx1
cmd /c "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "http://subscene.com/subtitles/title?q=%xGOOGLESEARCH%"
这看起来很简单,但行不通。相反,Windows 认为我正在尝试打开文件 并询问我使用什么程序。如果我选择 Chrome,顺便说一句,它实际上开始播放标签中的视频。
我确信问题出在注册表代码上,但我不知道如何告诉系统我不想打开我右键单击的文件;我只想使用它的文件名。我熟悉注册表,但不够熟练,看不出问题所在。
在此先感谢您的帮助!
批处理文件路径包含空格,因此您必须用引号将其括起来:
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "\"C:\My Projects\My Code\SubtitleSearch.bat\" \"%1\""
我认为您不需要将命令行末尾的“%1”内容放入注册表。选择打开文件的可执行文件将目标文件隐式获取为 %1。无需在命令行中明确说明。事实上,我认为 %1 甚至没有在那个上下文中定义,只在你的批处理文件中定义。最后一部分可能被解释为文字参数 String,这对批处理解释器没有意义。您是否尝试在批处理文件顶部的某处使用 echo %1
来检查其值?
编辑:该死! 4 年 9 个月等待进一步的答案......我为你感到难过:(
@echo off
setlocal
rem Process 1st argument passed.
if "%~1" == "/?" goto :help
if "%~1" == "/query" goto :query
if "%~1" == "/register" goto :register
if "%~1" == "/unregister" goto :unregister
if "%~1" == "" exit /b 1
goto :search
exit /b 0
:help
echo Open chrome search page with filename as the item to search.
echo:
echo Syntax: "%~nx0" keyword
echo:
echo Arguments:
echo /?
echo This help message.
echo /query
echo View a query of registered entries.
echo /register
echo Register context menu entries.
echo /unregister
echo Unregister context menu entries.
exit /b 0
:query
reg query "HKLM\software\Classes\*\shell\Subtitle Search" /s
exit /b 0
:register
echo Register subtitle search
reg add "HKLM\software\Classes\*\shell\Subtitle Search" /d "Subtitle Search" /f
reg add "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "\"%~f0\" \"%%1\"" /f
if errorlevel 1 net session >nul 2>&1 || echo Require admin to register.
exit /b 0
:search
rem Filename as item to search. If want extension also, use nx modifiers instead of just n.
set "search=%~n1"
rem URL used as the search engine.
:: set "url=https://www.google.com/search?q="
set "url=https://www.startpage.com/do/search/?q="
:: set "url=http://subscene.com/subtitles/title?q="
rem Use start so that the window does not remain open. CMD not being called so surrounding double quotes not stripped.
start "" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "%url%%search%"
rem View CMD /?. Surrounding double quotes and more than 1 pair may have the outer pair stripped. Add another escaped pair to be stripped.
:: cmd /s /c ^""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "%url%%search%"^"
rem Uncomment command to check commandline of cmd.exe.
:: wmic process where caption="cmd.exe" get commandline & pause
exit /b 0
:unregister
echo Unregister subtitle search
reg delete "HKLM\software\Classes\*\shell\Subtitle Search" /f
if errorlevel 1 net session >nul 2>&1 || echo Require admin to unregister.
exit /b 0
您的代码中的问题:
- 使用
reg
命令时使用反斜杠转义内部双引号,即 """"
到 "\"\""
.
- 转义
%
符号与另一个 %
以便 reg
可以添加文字 %1
即 %1
到 %%1
.
- “Windows 认为我正在尝试打开文件”可能是双引号问题引起的,我还没有重现。
如果命令周围有双引号并且有超过 2 个双引号,CMD 可能会去除双引号。
查看 cmd /?
解析规则:
If /C or /K is specified, then the remainder of the command line after
the switch is processed as a command line, where the following logic is
used to process quote (") characters:
If all of the following conditions are met, then quote characters
on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters,
where special is one of: &<>()@^|
- there are one or more whitespace characters between the
two quote characters
- the string between the two quote characters is the name
of an executable file.
Otherwise, old behavior is to see if the first character is
a quote character and if so, strip the leading character and
remove the last quote character on the command line, preserving
any text after the last quote character.
我已经将脚本合二为一,您可以通过以下方式注册:
search /register
预期输出:
Register subtitle search
The operation completed successfully.
The operation completed successfully.
确保使用命令提示符作为管理员,因为注册到 HKLM
分支可能需要它。脚本所在的位置是添加到注册表的路径。所以不要在任何地方注册,稍后将其移动到正确的路径。
通过以下方式查询注册表项:
search /query
预期输出:
HKEY_LOCAL_MACHINE\software\Classes\*\shell\Subtitle Search
(Default) REG_SZ Subtitle Search
HKEY_LOCAL_MACHINE\software\Classes\*\shell\Subtitle Search\Command
(Default) REG_SZ "C:\My Projects\My Code\search.cmd" "%1"
通过以下方式查看帮助信息:
search /?
如果在 :search
标签中取消注释 wmic
命令,在打开的控制台中执行搜索的输出是:
CommandLine
cmd /c ""C:\My Projects\My Code\search.cmd" "C:\My Projects\My Code\Alice In Wonderland.mp4""
Press any key to continue . . .
默认情况下,此命令应作为注释禁用或删除,因为仅添加用于检查命令行。
如果startpage.com用于搜索引擎,Chrome在URL打开:
https://www.startpage.com/do/search/?q=Alice%20In%20Wonderland
如果提到的两个参数都没有传递,并且第一个参数是某物,则使用 Chrome 进行搜索。没有参数只会结束脚本,因为对任何处理都没有用。
我无法访问 subscene.com
站点,因此我添加了一些其他 URL 用于测试。
禁用了 cmd
命令并添加了 start
的使用,因此控制台 window 关闭并打开 Chrome。我在脚本中留下了 cmd
,所以你可以看到它可以工作。
注销:
search /unregister
预期输出:
Unregister subtitle search
The operation completed successfully.
确保使用命令提示符作为管理员,因为从 HKLM
分支注销可能需要它。脚本的位置无关紧要,因为它会删除整个注册表项。
你为什么不制作一个 .reg 文件来创建一个右键单击菜单来执行你想要执行的操作?我不清楚你的 objective 所以我只能做这些了。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\StartChrome]
@="Start google chrome and search for ____ website"
[HKEY_CLASSES_ROOT\*\shell\StartChrome\command]
@="cmd /min /c \"start chrome.exe google.com"
这是一个 .reg 文件,它创建一个右键单击菜单提示,提示“Start google chrome and search for ____ website
”,然后启动 chrome 并转到 Google.com。在最后的 @=""
部分,在引号中,放置您希望右键单击在激活时执行的操作。在第一个 @=""
部分,您可以在右键单击菜单中选择应该说的内容。如果你想去掉右键菜单选项,进入注册表,找到你在第二行和第四行指定的注册表部分,删除它们。然后重启资源管理器,选项就没有了
我用 brave 而不是 chrome 将 chrome.exe 替换为 brave.exe 并通过打开 google.com 按预期工作。在 reg 文件的命令部分,%1 是您右键单击以显示提示的内容。
这是我尝试做您可能想要的事情的最佳尝试:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\StartChrome]
@="Start google chrome and search for ____ website"
[HKEY_CLASSES_ROOT\*\shell\StartChrome\command]
@="cmd /min /c \"start chrome.exe 'http://subscene.com/subtitles/title?q=%~nx1'"
我找到了另一种方法,
首先从 Chrome 商店安装 Violentmonkey 扩展,然后安装这个脚本 SubScene Searcher
然后使用以下内容在 sendto 文件夹中创建一个 bat 文件:
set Subscene=%~nx1
start "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "http://subscene.com/subtitles/title?q=%Subscene%"
现在您可以从“发送到”菜单进行搜索
我想在 Windows Explorer 中的右键单击菜单中添加一个选项,它将启动 Chrome 并在特定站点中搜索该文件的名称。更具体一点,我希望能够在视频文件上执行此操作,然后为其寻找可用的字幕。我知道有很多程序可以做一些变化,但是在尝试了很多之后,我还没有完全找到我想要的东西。不仅如此,我宁愿使用一些轻量级的本机代码,也不愿安装另一个程序。
我找到的最接近指南的是 in this post,但它不太管用。当然,我已经尝试根据我的需要清理它,但它仍然不起作用,所以我认为那里有一个缺陷。这是我目前所拥有的...
运行 命令提示符作为管理员,我执行了这两行以将它们添加到注册表中:
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search" /d "Subtitle Search"
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "C:\My Projects\My Code\SubtitleSearch.bat ""%1"""
然后,我创建了一个批处理文件 (SubtitleSearch.bat),内容如下:
set xGOOGLESEARCH=%~nx1
cmd /c "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "http://subscene.com/subtitles/title?q=%xGOOGLESEARCH%"
这看起来很简单,但行不通。相反,Windows 认为我正在尝试打开文件 并询问我使用什么程序。如果我选择 Chrome,顺便说一句,它实际上开始播放标签中的视频。
我确信问题出在注册表代码上,但我不知道如何告诉系统我不想打开我右键单击的文件;我只想使用它的文件名。我熟悉注册表,但不够熟练,看不出问题所在。
在此先感谢您的帮助!
批处理文件路径包含空格,因此您必须用引号将其括起来:
REG ADD "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "\"C:\My Projects\My Code\SubtitleSearch.bat\" \"%1\""
我认为您不需要将命令行末尾的“%1”内容放入注册表。选择打开文件的可执行文件将目标文件隐式获取为 %1。无需在命令行中明确说明。事实上,我认为 %1 甚至没有在那个上下文中定义,只在你的批处理文件中定义。最后一部分可能被解释为文字参数 String,这对批处理解释器没有意义。您是否尝试在批处理文件顶部的某处使用 echo %1
来检查其值?
编辑:该死! 4 年 9 个月等待进一步的答案......我为你感到难过:(
@echo off
setlocal
rem Process 1st argument passed.
if "%~1" == "/?" goto :help
if "%~1" == "/query" goto :query
if "%~1" == "/register" goto :register
if "%~1" == "/unregister" goto :unregister
if "%~1" == "" exit /b 1
goto :search
exit /b 0
:help
echo Open chrome search page with filename as the item to search.
echo:
echo Syntax: "%~nx0" keyword
echo:
echo Arguments:
echo /?
echo This help message.
echo /query
echo View a query of registered entries.
echo /register
echo Register context menu entries.
echo /unregister
echo Unregister context menu entries.
exit /b 0
:query
reg query "HKLM\software\Classes\*\shell\Subtitle Search" /s
exit /b 0
:register
echo Register subtitle search
reg add "HKLM\software\Classes\*\shell\Subtitle Search" /d "Subtitle Search" /f
reg add "HKLM\software\Classes\*\shell\Subtitle Search\Command" /d "\"%~f0\" \"%%1\"" /f
if errorlevel 1 net session >nul 2>&1 || echo Require admin to register.
exit /b 0
:search
rem Filename as item to search. If want extension also, use nx modifiers instead of just n.
set "search=%~n1"
rem URL used as the search engine.
:: set "url=https://www.google.com/search?q="
set "url=https://www.startpage.com/do/search/?q="
:: set "url=http://subscene.com/subtitles/title?q="
rem Use start so that the window does not remain open. CMD not being called so surrounding double quotes not stripped.
start "" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "%url%%search%"
rem View CMD /?. Surrounding double quotes and more than 1 pair may have the outer pair stripped. Add another escaped pair to be stripped.
:: cmd /s /c ^""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "%url%%search%"^"
rem Uncomment command to check commandline of cmd.exe.
:: wmic process where caption="cmd.exe" get commandline & pause
exit /b 0
:unregister
echo Unregister subtitle search
reg delete "HKLM\software\Classes\*\shell\Subtitle Search" /f
if errorlevel 1 net session >nul 2>&1 || echo Require admin to unregister.
exit /b 0
您的代码中的问题:
- 使用
reg
命令时使用反斜杠转义内部双引号,即""""
到"\"\""
. - 转义
%
符号与另一个%
以便reg
可以添加文字%1
即%1
到%%1
. - “Windows 认为我正在尝试打开文件”可能是双引号问题引起的,我还没有重现。
如果命令周围有双引号并且有超过 2 个双引号,CMD 可能会去除双引号。 查看
cmd /?
解析规则:If /C or /K is specified, then the remainder of the command line after the switch is processed as a command line, where the following logic is used to process quote (") characters:
If all of the following conditions are met, then quote characters on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters, where special is one of: &<>()@^|
- there are one or more whitespace characters between the two quote characters
- the string between the two quote characters is the name of an executable file.
Otherwise, old behavior is to see if the first character is a quote character and if so, strip the leading character and remove the last quote character on the command line, preserving any text after the last quote character.
我已经将脚本合二为一,您可以通过以下方式注册:
search /register
预期输出:
Register subtitle search The operation completed successfully. The operation completed successfully.
确保使用命令提示符作为管理员,因为注册到 HKLM
分支可能需要它。脚本所在的位置是添加到注册表的路径。所以不要在任何地方注册,稍后将其移动到正确的路径。
通过以下方式查询注册表项:
search /query
预期输出:
HKEY_LOCAL_MACHINE\software\Classes\*\shell\Subtitle Search (Default) REG_SZ Subtitle Search HKEY_LOCAL_MACHINE\software\Classes\*\shell\Subtitle Search\Command (Default) REG_SZ "C:\My Projects\My Code\search.cmd" "%1"
通过以下方式查看帮助信息:
search /?
如果在 :search
标签中取消注释 wmic
命令,在打开的控制台中执行搜索的输出是:
CommandLine cmd /c ""C:\My Projects\My Code\search.cmd" "C:\My Projects\My Code\Alice In Wonderland.mp4"" Press any key to continue . . .
默认情况下,此命令应作为注释禁用或删除,因为仅添加用于检查命令行。
如果startpage.com用于搜索引擎,Chrome在URL打开:
https://www.startpage.com/do/search/?q=Alice%20In%20Wonderland
如果提到的两个参数都没有传递,并且第一个参数是某物,则使用 Chrome 进行搜索。没有参数只会结束脚本,因为对任何处理都没有用。
我无法访问 subscene.com
站点,因此我添加了一些其他 URL 用于测试。
禁用了 cmd
命令并添加了 start
的使用,因此控制台 window 关闭并打开 Chrome。我在脚本中留下了 cmd
,所以你可以看到它可以工作。
注销:
search /unregister
预期输出:
Unregister subtitle search The operation completed successfully.
确保使用命令提示符作为管理员,因为从 HKLM
分支注销可能需要它。脚本的位置无关紧要,因为它会删除整个注册表项。
你为什么不制作一个 .reg 文件来创建一个右键单击菜单来执行你想要执行的操作?我不清楚你的 objective 所以我只能做这些了。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\StartChrome]
@="Start google chrome and search for ____ website"
[HKEY_CLASSES_ROOT\*\shell\StartChrome\command]
@="cmd /min /c \"start chrome.exe google.com"
这是一个 .reg 文件,它创建一个右键单击菜单提示,提示“Start google chrome and search for ____ website
”,然后启动 chrome 并转到 Google.com。在最后的 @=""
部分,在引号中,放置您希望右键单击在激活时执行的操作。在第一个 @=""
部分,您可以在右键单击菜单中选择应该说的内容。如果你想去掉右键菜单选项,进入注册表,找到你在第二行和第四行指定的注册表部分,删除它们。然后重启资源管理器,选项就没有了
我用 brave 而不是 chrome 将 chrome.exe 替换为 brave.exe 并通过打开 google.com 按预期工作。在 reg 文件的命令部分,%1 是您右键单击以显示提示的内容。 这是我尝试做您可能想要的事情的最佳尝试:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\StartChrome]
@="Start google chrome and search for ____ website"
[HKEY_CLASSES_ROOT\*\shell\StartChrome\command]
@="cmd /min /c \"start chrome.exe 'http://subscene.com/subtitles/title?q=%~nx1'"
我找到了另一种方法, 首先从 Chrome 商店安装 Violentmonkey 扩展,然后安装这个脚本 SubScene Searcher 然后使用以下内容在 sendto 文件夹中创建一个 bat 文件:
set Subscene=%~nx1
start "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "http://subscene.com/subtitles/title?q=%Subscene%"
现在您可以从“发送到”菜单进行搜索