2015-07-10 33 views
0
  $sImageMagickHome = "C:\ImageMagick" 
      $sImageMagickConv = "$sImageMagickHome\convert.exe" 
      $sImageMagickArgs = @( '--%', 
          '-background transparent', 
          '-fill hsb(0,0,0)', 
          '-font Arial', 
          '-pointsize 18', 
          '-size 18x26', 
          '-gravity center') 


      for ($i = 0x01; $i -le 0x05; $i++) 
      { 
       $y = [char]$i 
       & $sImageMagickConv $sImageMagickArgs label:$y $sCharsDir\$y.png 
       #Write-Host $sImageMagickConv $sImageMagickArgs label:$y $sCharsDir\$y.png 
      } 

使用直寫式主機,我可以得到一個例子,複製粘貼到命令行中,我發現它並正常運行,如果我請從PowerShell提示符這一行:使用call「和」運營商,多參數

C:\ImageMagick\convert.exe --% -background transparent -fill hsb(0,0,0) -font Arial -pointsize 18 -size 18x26 -gravity center label:☺ C:\Users\erics_000\Desktop\Output\Chars\☺.png 

使用從腳本中調用操作「&」在所有但不工作,導致一些錯誤消息:

convert.exe: UnableToOpenBlob `--%': No such file or directory @ error/blob.c/OpenBlob/2697. 
convert.exe: NoDecodeDelegateForThisImageFormat `' @ error/constitute.c/ReadImage/501. 
convert.exe: UnrecognizedOption `-background transparent' @ error/convert.c/ConvertImageCommand/858. 

的文章中,我一直在閱讀是: http://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

謝謝...

+0

你嘗試從args數組中刪除' - %'嗎?我認爲如果逐字添加到調用中,而不是通過變量傳遞,它纔有意義。 – n0rd

+0

- %存在,因爲它不會在沒有 - %的PowerShell提示符下運行。從參數數組中刪除 - %會導致不同的問題。 convert.exe:UnrecognizedOption' - 背景透明'@ error/convert.c/ConvertImageCommand/858。 – Giuseppe

+0

那麼,'-background'和'transparent'應該與'convert.exe'預期它們是不同的數組項目。使用你當前的代碼,powershell會產生單個'-background transparent'(就像你把引號放在它的周圍一樣)參數。 – n0rd

回答

1

下面的腳本對我的作品:

$sImageMagickHome = "C:\dev\im" 
$sImageMagickConv = "$sImageMagickHome\convert.exe" 
$sImageMagickArgs = @('-background', 'transparent', 
       '-fill', 'hsb(0,0,0)', 
       '-font', 'Arial', 
       '-pointsize', '18', 
       '-size', '18x26', 
       '-gravity', 'center') 


for ($i = 65; $i -le 67; $i++) 
{ 
    $y = [char]$i 
    & $sImageMagickConv $sImageMagickArgs label:$y c:\dev\$y.bmp 
} 

請注意,你不能只是Write-Host的參數和嘗試從命令行運行它,PowerShell將特殊處理&運算符(在需要的地方添加引號),當您將相同參數傳遞給Write-Host時不會發生這種情況。

您可能想要安裝PSCX並與其搭配的echoargs實用程序一起玩,以更好地理解參數如何傳遞。

+0

我把你的數組放在腳本中,現在的問題是無法打開blob。 http://pastebin.com/NswmzR4A。輸出參數包含文件的完整路徑並導致腳本崩潰。 – Giuseppe

+0

如果您運行腳本(即不將命令粘貼到命令行中),它​​會失敗嗎? – n0rd

+0

當您手動運行它時,您需要適當地添加' - %'或引用參數。當你用'&'運行並且傳遞數組時Powershell會爲你引用。 – n0rd