我有两个convert.exe
在我的PATH
. 其中一个来自 ImageMagick,另一个来自 Windows。
user=> (clojure.java.shell/sh "where" "convert")
{:exit 0, :out "E:\\Program Files\\ImageMagick-6.8.3-Q16\\convert.exe\r\nC:\\Windows\\System32\\convert.exe\r\n", :err ""}
我想convert.exe
在clojure.java.shell/sh
. 通常,我可以在 PowerShell 中执行此操作。
PS E:\Users\bt> convert --version
Version: ImageMagick 6.8.3-8 2013-03-04 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: bzlib fontconfig freetype jng jp2 jpeg lcms lzma pango png ps tiff x xml zlib
但是,这在clojure.java.shell/sh
.
user=> (clojure.java.shell/sh "convert" "--version" :dir "E:/Users/bt")
{:exit 4, :out "", :err "Invalid drive specification.\r\n"}
最初,我认为我需要将 ImageMagick 的路径移到我的前面,PATH
以便它优先于 Windows 的二进制文件,但这没有任何效果。另外,我把它移到了PATH
只是为了踢球。那也没用。
我知道解决此问题的唯一替代方法是重命名其中一个可执行文件。但这是不受欢迎的,因为我不希望其他人重命名他们的 ImageMagick/Windows 二进制文件只是为了让我的代码工作。
如果此信息有任何用处,则打开一个新的命令外壳(不是 PowerShell,而是只有当我cmd.exe
)以C:\Windows\System32
. 我有一种感觉,这可能会影响可执行文件的选择,但我不确定。cmd.exe
从 Launchy 运行时才会发生这种情况。如果我使用开始菜单,它将在我的主目录中启动。
有没有办法做到这一点?我觉得我错过了一些明显的东西。