如何添加右键单击选项以使用所选文件名搜索网络?

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:

    1. 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.
    2. 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%"

现在您可以从“发送到”菜单进行搜索