2

我已经使用下面的脚本在我的系统中注册了一个 URL 协议来启动一个批处理文件“showPath.bat”。

@echo off
reg add HKEY_CLASSES_ROOT\ProtoTest /t REG_SZ /d "My Description" /f
reg add HKEY_CLASSES_ROOT\ProtoTest /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell\open /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell\open\command /t REG_SZ /d "C:\TestFolder\showPath.bat" /f

pause

“showPath.bat”的内容只是显示当前工作目录。IE。,

@echo off
SET var=%cd%
ECHO %var%
pause

如果我通过双击直接运行批处理文件,我可以正确看到它的路径。但是,如果我使用上面注册的 URL 协议启动批处理文件。即,从 Chrome 浏览“ProtoTest://”,批处理文件运行,但显示路径“C:\Windows\system32”而不是批处理文件的目录。因此,我相信使用 URL 协议启动的应用程序以 system32 作为工作目录运行。现在,如何在使用 URL 协议从浏览器启动时从其自己的目录运行批处理文件 - 无需修改批处理文件本身。我只能更改 URL 协议。

4

1 回答 1

3

下面的代码对我有用。我将批处理文件放在一个包含空格的文件夹中,因此添加了“”和转义字符。然而,它被添加到注册表中,如下图所示,没有转义字符。回复@aschipfl

@echo off
reg add HKEY_CLASSES_ROOT\ProtoTest2 /t REG_SZ /d "My Description" /f
reg add HKEY_CLASSES_ROOT\ProtoTest2 /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell\open /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell\open\command /t REG_EXPAND_SZ /d "%ComSpec% /C \"cd /D \"C:\Source\For Ref\URL Protocol\BatchTest\" ^& showPath.bat\"" /f

pause

在此处输入图像描述

于 2021-07-30T14:20:26.490 回答