2016-09-27 6 views
0

Я пытаюсь запустить командную строку imagemagick в своей операционной системе Windows, но это не сработает, если я запустил ее в своей обычной командной строке, она работает.Команда Imagemagick в командной строке и windows powershell

Команда выглядит следующим образом:

(не нужны переносы строк, я просто положил их так, чтобы команда более читаемая)

convert -bordercolor none -background none -gravity center^
k1.jpg -border 5x5^
(k2.jpg k3.jpg k4.jpg -border 5x5 +append)^
(k5.jpg k6.jpg k1.jpg -border 5x5 +append)^
-append -border 5x5 -resize 720x480 output.png 

Я получаю следующую ошибку, если я запускаю его в мой PowerShell: (я должен был перевести на английский)

k2.jpg: формулировка «k2.jpg» не был обнаружен как имя командлета, функции, файла сценария.

Edit:

На самом деле я не нужны линии разрывов, я просто положил их так, чтобы код более читаемым, если у вас есть предложение без автоматических линий это прекрасно, а также.

Edit:

Я попытался предложение Мэтта так:

convert --% -bordercolor none -background none -gravity center k1.jpg -border 5x5 (k2.jpg k3.jpg k4.jpg -border 5x5 +append) (k5.jpg k6.jpg k7.jpg -border 5x5 +append) -append -border 5x5 -resize 720x480 output.png 

И я получил следующее/сообщение об ошибке:

convert.exe: Не удается открыть файл «(k2. jpg ': Нет такого файла или каталога @ error/blob.c/OpenBlob/2695. convert.exe: непризнанная опция `+ append)' @ error/convert.c/ConvertImageCommand/764.

+0

Powershell использует другие разрывы строк: http://stackoverflow.com/questions/3235850/how-to-enter-a-multi-line-command –

+0

@ D.J. спасибо, я не знал этого, мне действительно не нужны разрывы строк в моей команде, я просто их отложил, чтобы команда была более читаемой. Попробовав свое предложение, я получаю ту же ошибку выше. – utdev

+0

Эта вторая ошибка не из PowerShell. Это происходит от convert.exe. Казалось бы, параметр остановки разбора работает так, как предполагалось сейчас. – Matt

ответ

1

Главный вопрос заключается в том, что PowerShell пытается лечить тех, как PowerShell синтаксис. () обозначает выражение.

There are multiple ways of handling exe's in PowerShell. В зависимости от вашего намерения и версии PowerShell некоторые параметры больше болят, чем другие (некоторые даже устарели более предпочтительными методами).

Проще всего сделать с тем, что вы показали, чтобы использовать оператор остановки разбора:

Запорный разбора символ (-%), введенный в Windows PowerShell 3.0, направляет Windows PowerShell для воздержитесь от интерпретации ввода как Команды или выражения Windows PowerShell.

Таким образом, вы можете просто сделать это вместо:

convert --% -bordercolor none -background none -gravity center.... 

У меня нет условий, чтобы проверить то, что вы делаете, но, возможно, вы можете использовать кавычки вокруг этих аргументов так PowerShell не будут думать о это ничего, кроме строки.

"(k2.jpg k3.jpg k4.jpg -border 5x5 +append)" 
+0

Спасибо за ваши предложения, я сначала попробовал ваше второе предложение :) к сожалению, это не сработало, мне нужно вызвать первое предложение -% только один раз в начале или мне нужно позвонить его более одного раза? – utdev

+0

Однажды на старте @utdev – Matt

+0

Я попробовал ваше предложение, но это не сработало. Я обдумал свой вопрос с помощью команды, которую я использовал + сообщение об ошибке/из командной строки – utdev

0

Другой подход должен был бы начать процесс так: StartProcess -FilePath $pathToConvert -Args "-bordercolor none -background none -gravity...." -wait

этот путь PowerShell не пытается интерпретировать ImageMagick-арг

+0

Думаю, вам нужно отправить массив аргументов. конвертировать может не понравиться тот, который был отправлен так. Кроме того, если переменные не используются, здесь будет работать оператор разбора остановок. 'convert -% ....' – Matt

+0

I guees -FilePath $ pathToConvert для пути, где я получаю свои изображения, я уже перехожу к этому пути, поэтому, полагаю, мне не нужна эта часть команды правильно? – utdev

+0

@Matt может ваше сообщение ваше предложение – utdev