路径设置不需要';在windows shell中,python36并不总是有效

路径设置不需要';在windows shell中,python36并不总是有效,windows,path,Windows,Path,我的Win7笔记本电脑中的Python3.6已安装在C:\Program Files(x86)\Python36-32下,并且已使用脚本路径将路径添加到环境路径中 我可以键入python从任何命令窗口启动它,因此我认为路径设置是有效的 但是,我使用以下注册表设置从目录上下文菜单启动一些python脚本: reg add "HKCR\Directory\shell\unLog" /ve /t REG_SZ /d "un-Log" /f reg add "HKCR\Directory\shell\u

我的Win7笔记本电脑中的Python3.6已安装在C:\Program Files(x86)\Python36-32下,并且已使用脚本路径将路径添加到环境路径中

我可以键入python从任何命令窗口启动它,因此我认为路径设置是有效的

但是,我使用以下注册表设置从目录上下文菜单启动一些python脚本:

reg add "HKCR\Directory\shell\unLog" /ve /t REG_SZ /d "un-Log" /f
reg add "HKCR\Directory\shell\unLog\command" /ve /t REG_SZ /d "python.exe \"%~dp0log.py\" \"%%1\"" /f
每当我单击上下文菜单中的unLog时,它总是告诉我它找不到可执行文件——如果我将“python.exe”更改为“C:\Program Files(x86)\Python36-32\python.exe”,它也会工作,所以路径设置在这种情况下不工作


我使用py.exe替换python.exe使其再次工作,因为启动程序py.exe位于C:\Windows文件夹下。但我仍然不知道为什么之前的设置失败。任何建议都将不胜感激。

模板命令应为可执行文件使用完全限定的路径。Windows shell API不会搜索路径
。但是,如果您签入调试器,您将看到,至少在Windows 10中,它确实通过WinRT存储API库Windows.Storage.dll中的未记录函数
\u pathFindSystem
FOLDERID_系统
FOLDERID_窗口
中查找。因此,您似乎可以访问系统可执行文件,而无需使用完全限定路径,但在这种情况下,我也会使用完全路径。顺便说一句,您应该避免使用HKCR预定义句柄来创建注册表项。这是用户和机器的组合视图
Software\Classes
,密钥是按用户创建还是按机器创建取决于现有密钥。最好是显式地为用户或计算机创建密钥。@eryksun,感谢您的解释,我将设法在windows批处理脚本中获取python可执行文件的完整限定路径。@eryksun,也感谢关于HKCR的建议:)您可以
调用
子例程来搜索
路径
。假设
%1
是“python.exe”,那么
%~f$PATH:1
是找到的完整路径。如果
%2
具有要设置为输出参数的变量名称,则整个语句将是
set“%~2=%~f$PATH:1”
。或者您可以使用
来代替/f“delims=“%i in('python-c“import sys;print(sys.executable)”)设置“python=%i”