Chocolatey为.bat文件创建shim运行时报文件不存在如何解决
问题原因
你调用Install-BinFile时传入的-Path参数为工具目录路径,不符合该参数的使用要求:-Path需要指定目标可执行脚本/程序的完整绝对路径,而非父级目录。你当前的配置让shim错误地将目录识别为待执行的目标文件,运行时自然会抛出找不到文件的报错。
修正方案
方法1:修正Install-BinFile参数
将chocolateyinstall.ps1的内容修改为如下形式即可:
$ErrorActionPreference = 'Stop'; # stop on all errors $toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" # 拼接得到bat文件的完整路径 $targetScriptPath = Join-Path $toolsDir "test.bat" # Name参数不需要带.bat后缀,生成的shim可直接通过test命令调用 Install-BinFile -Name 'test' -Path $targetScriptPath
如果是为PowerShell脚本生成shim,只需要将上述代码中的test.bat替换为对应的.ps1文件名即可。
方法2:使用Chocolatey自动shim机制(更简便)
Chocolatey默认会为tools目录下的.bat/.cmd/.ps1/.exe文件自动生成对应shim,如果你不需要自定义shim的名称,完全可以删除chocolateyinstall.ps1里的Install-BinFile调用,不需要额外配置即可实现你要的效果。
如果后续你希望某个文件不生成shim,只需要在同目录下创建一个和该文件同名、后缀为.ignore的空文件即可。
验证方法
修改配置后重新打包、安装Chocolatey包,运行生成的shim命令即可正常调用对应的脚本,不会再出现路径报错。
内容的提问来源于stack exchange,提问作者Jetpac
相关产品推荐
相关产品推荐

