Powershell - 带单引号和双引号的空格错误的参数

时间:2014-03-21 18:10:12

标签: powershell arguments libtiff

此代码采用tiffs目录,使用tiflib tiffcp.exe并在第一页插入另一个tiff,这是一个版权声明。当我调用压缩时,持续出错的部分。 & $tool -c lzw

它给出的错误是

& $tool -c lzw ` + ~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (TIFFReadDirecto...4) encountered.:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError

现在,我知道这是因为参数中有一个空格。我试过把它放在双引号,单引号,把它放在一个参数,把它放在两个参数,以及其他一些东西。无论我做什么,LZW部分似乎都会出错。我应该说它仍然有效。它仍会插入页面并移动旧副本。感谢您提供任何帮助。

$tool = 'c:\tiff-3.8.2-1-bin\bin\tiffcp.exe'
$tifs = get-childitem . | where {$_.Extension -match "tif"}

foreach($tif in $tifs)
{
    if ($tif -like '*copyright*')
        {
        "File already has copyright notice " + $tif
        }
    else        
        {   
    'Processing ' + $tif.Name        
    $output = "copyright-$tif"
    & $tool "-c lzw" `
    "c:\copyright pages\copyright.tif"  $tif.FullName $output

     Move-Item $tif C:\backup
    }
}

3 个答案:

答案 0 :(得分:0)

尝试使用一组参数。

$Args = @("-c lzw","c:\copyright pages\copyright.tif",$tif.FullName,$output)
& $tool $Args

或者,如果您对此感到不舒服,可以将变量分配给所有内容,只需将变量抛出到调用操作符,如下所示:

$arg1 = "-c lzw"
$arg2 = "c:\copyright pages\copyright.tif"
$arg3 = $tif.FullName
& $tool $arg1 $arg2 $arg3 $output

答案 1 :(得分:0)

此代码:

$output = "copyright-$tif"
& $tool "-c lzw" "c:\copyright pages\copyright.tif"  $tif.FullName $output

导致命令有点像这样:

tiffcp.exe -c lzw "1.tif" "c:\2.tif" "copyright-c:\2.tif"

问题是"copyright-$tif"正在放入完整的文件路径,这会使输出成为无意义的文件名。

尝试:

$tool = 'c:\tiff-3.8.2-1-bin\bin\tiffcp.exe'
$tifs = Get-ChildItem .\*.tif

foreach ($tif in $tifs)
{
    if ($tif -like '*copyright*')
    {

        write "File already has copyright notice $tif"

    } else {

        write "Processing $tif"

        $output = "copyright-$($tif.Name)"
        & $tool -c lzw "c:\copyright pages\copyright.tif" $tif.FullName $output

        Move-Item $tif C:\backup
    }
}

评论:

  • Get-ChildItem可以直接找到* .tif,无需获取所有文件并使用where,所以我改了。

  • 使用字符串插值`"处理$ tif"和类似的

  • 我认为if ($tif -match 'copyright')if ($tif.Name.Contains("copyright"))感觉更好,但为什么不在早些时候过滤掉那些,当你得到孩子时?

编辑示例代码过滤掉已经受版权保护的代码:

e.g。

$tool = 'c:\tiff-3.8.2-1-bin\bin\tiffcp.exe'
$tifs = (gci .\*.tif | ?{ $_.Name -notmatch "copyright" })

foreach ($tif in $tifs) {

    write "Processing $tif"

    & $tool -c lzw "c:\copyright pages\copyright.tif" "$tif" "copyright-$($tif.Name)"

    Move-Item $tif C:\backup
}

答案 2 :(得分:0)

我相信我已成为Poweshell本身的一个错误/选择的受害者。我想我遇到了这个确切的问题。

Ignoring an errorlevel != 0 in Windows Powershell

https://superuser.com/questions/213848/using-powershell-call-native-command-line-app-and-capture-stderr

我会尽力将这里给出的答案作为清理代码的方法。谢谢你的帮助!