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