修改注册表命令:让程序在自身目录启动并传入点击文件路径
解决双击文件时程序启动目录的问题
我编写了一个批处理文件,用于创建注册表项,实现双击特定扩展名的文件来打开指定程序。当前程序会在被点击文件所在的目录启动,需要改为在%pathtoexe%所在目录启动程序,同时传入被点击文件的完整路径作为参数。
原批处理代码如下:
for %%A in ("%~dp0.") do set "folder=%%~dpA" set "ftypename=release" set "extension=.pmp" set "pathtoexe=%folder%TranslationUpdater.exe" set "pathtoicon=%~dp0file_type_favicon.ico" REG ADD HKCU\SOFTWARE\Classes\%extension% /ve /d "%ftypename%" /f REG ADD HKCU\SOFTWARE\Classes\%ftypename%\DefaultIcon /ve /d "%pathtoicon%" /f reg add HKCU\SOFTWARE\Classes\%ftypename%\Shell\Open\Command /ve /d ""%pathtoexe%" "%%1"" /f ftype %ftypename%="%pathtoexe%" "%%1" assoc %extension%=%ftypename%
需要让注册表命令行包含切换目录后启动程序的逻辑,类似:
cd %folder% start %pathtoexe% %1
修改后的批处理代码
for %%A in ("%~dp0.") do set "folder=%%~dpA" set "ftypename=release" set "extension=.pmp" set "pathtoexe=%folder%TranslationUpdater.exe" set "pathtoicon=%~dp0file_type_favicon.ico" REG ADD HKCU\SOFTWARE\Classes\%extension% /ve /d "%ftypename%" /f REG ADD HKCU\SOFTWARE\Classes\%ftypename%\DefaultIcon /ve /d "%pathtoicon%" /f :: 切换到exe所在目录后启动程序,确保启动路径正确 reg add HKCU\SOFTWARE\Classes\%ftypename%\Shell\Open\Command /ve /d "cmd /c cd /d "%folder%" && start "" "%pathtoexe%" "%%1"" /f :: 同步更新ftype的命令,保持行为一致 ftype %ftypename%=cmd /c cd /d "%folder%" && start "" "%pathtoexe%" "%%1" assoc %extension%=%ftypename%
改动说明
- 核心修改了注册表
Shell\Open\Command和ftype的命令值,通过cmd /c串联两个操作:cd /d "%folder%":使用/d参数确保跨盘符切换到exe所在的目录start "" "%pathtoexe%" "%%1":start后的空字符串""是标题参数,避免程序路径含空格时出现错误,同时传入被点击文件的完整路径作为参数
内容的提问来源于stack exchange,提问作者rastorguev.i.a
相关产品推荐
相关产品推荐

