我在PowerShell中编写了一个脚本,我在不同的计算机上调用Image Magick的montage.exe取得了不同的成功。我编写脚本的计算机在执行“蒙太奇”时没有问题。命令,但是在另一台有IM的计算机上安装了脚本错误:
montage : The term 'montage' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At \\Server\Contact_Sheet_Local.ps1:51 char:9
+ montage -verbose -label %t -pointsize 20 -background '#FFFFFF ...
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (montage:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我尝试使用montage.exe
,甚至尝试了整个路径C:\Program Files\ImageMagick-7.0.3-Q16\montage.exe
。另外我尝试先设置目录:
Set-Location -Path 'C:\Program Files\ImageMagick-7.0.3-Q16'
montage...
每次在特定计算机上都会失败。我已尝试使用IM版本7.0.3-Q16和6.9.1-6-Q8两个x64,因为两台计算机都是x64
过去,我在.bat中创建了使用ImageMagick的脚本,我必须定义.exe的完整路径,如上所述。但这似乎对PowerShell没什么帮助。
有没有人对此问题有任何建议或经验?
答案 0 :(得分:0)
如果您的路径有空格,如果您只是尝试执行此操作,它将失败。您将要使用点运算符
$Exe = 'C:\Program Files\ImageMagick-6.9.1-6-Q8\montage.exe'
If (-not (Test-Path -Path $Exe))
{
$Exe = 'C:\Program Files\ImageMagick-7.0.3-Q16\montage.exe'
}
. $Exe -arg1 -etc
答案 1 :(得分:0)
默认情况下,PowerShell不会在当前目录中执行程序。如果要运行位于当前目录中的可执行文件,请在可执行文件的名称前加上.\
或./
。例如:
Set-Location "C:\Program Files\ImageMagick-7.0.3-Q16"
.\montage.exe ...
如果您在字符串或字符串变量中有可执行文件的名称并且想要执行它,则可以使用&
(调用或调用)运算符来执行此操作:
& "C:\Program Files\ImageMagick-7.0.3-Q16\montage.exe" ...
如果您指定的路径和文件名不包含空格,则不需要&
运算符;例如:
C:\ImageMagick\montage.exe ...
您也可以这样写:
& C:\ImageMagick\montage.exe ...
如果您在字符串变量中有可执行文件,并且想要执行它,请使用&
;例如:
$execName = "C:\Program Files\ImageMagick-7.0.3-Q16\montage.exe"
& $execName ...