Powershell не может вызывать команды ImageMagick - IM Montage

Я написал сценарий в PowerShell, и у меня разные успехи, вызывая Montage.exe Image Magick на разных компьютерах. Компьютер, на котором я написал сценарий, не имеет проблем с выполнением команды 'montage', однако на другом компьютере с 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.

У кого-нибудь есть совет или опыт с этой проблемой?

2 ответа

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 ...

Если в вашем пути есть пробелы, он потерпит неудачу, если вы просто попытаетесь выполнить на его основе. Вы хотите использовать оператор точки

$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
Другие вопросы по тегам