【问题标题】:Only convert files with the string "DUPLICATE" in the name仅转换名称中带有字符串“DUPLICATE”的文件
【发布时间】:2015-09-02 12:14:09
【问题描述】:

我正在尝试制作一个将 PDF 转换为 Tif 的脚本。

  1. 它将正确的文件从一个文件夹复制到另一个文件夹(感谢社区之前的帮助)。
  2. 接下来它将所有 pdf 转换为 tiff。
  3. 最后将 tiff 转换为 tif(名称更改)

我现在要做的只是将文件名中带有“DUPLICATE”的pdf转换为tiff。最后从新 tiff 的文件名中删除“DUPLICATE”。

有人知道怎么做吗?

gci X:\IT\PDFtoTIFF\1 -filter {VKF*} | Move-Item -destination X:\IT\PDFtoTIFF\2

$tool = 'C:\Program Files (x86)\GPLGS\gswin32c.exe'
$pdfs = get-childitem . -recurse | where {$_.Extension -match "pdf"}

foreach($pdf in $pdfs)
{

    $tiff = $pdf.FullName.split('.')[0] + '.tiff'
    if(test-path $tiff)
    {
        "tiff file already exists " + $tiff
    }
    else        
    {   
        'Processing ' + $pdf.Name        
        $param = "-sOutputFile=$tiff"
        & $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $pdf.FullName -c quit
    }
}

Dir *.tiff | rename-item -newname {  $_.name  -replace ".tiff",".tif"  }

更多详情: 脚本需要像这样工作:

  1. 文件夹\itgsrv028\invoices$\INST中所有以vkf开头的文件都需要移到这个文件夹:\itgsrv028\invoices$\INST\V3

(目前正在脚本中工作)

  1. 仅将名称中带有“Duplicaat”的文件转换为 Tiff
  2. 将 VKF_320150309DUPLICAAT.Tiff 重命名为 320150309.tif

示例: 文件夹中的这些文件:

VKF_320150309.PDF

VKF_320150309DUPLICAAT.PDF

需要成为:

VKF_320150309.PDF

VKF_320150309DUPLICAAT.PDF

320150309.TIF(转换自:VKF_320150309DUPLICAAT.PDF)

【问题讨论】:

  • 请提供示例名称。您可以运行 $tiff = $tiff -replace '\s?DUPLICATE', '' 来删除前面带有空格符号的单词。

标签: powershell pdf filenames tiff ghostscript


【解决方案1】:

关于仅使用“DUPLICAAT”:您必须稍微更改过滤条件,以在其中包含“DUPLICAAT”的匹配项,如下所示:

$pdfs = get-childitem . -recurse | where {$_.Extension -match "pdf" -and $_.basename -match "DUPLICAAT"} 

关于为 TIFF 建立新名称:您可以在正则表达式中使用组占位符来从已知字符的中间检索有价值的部分。以您的VKF_320150309DUPLICAAT.PDF 为例,您可以使用以下结构将其转换为正确的 TIFF 文件名:

$tiff="$($pdf.directory)\$($pdf.basename -replace "VKF_([\w\s]+)DUPLICAAT",'$1').tiff"

这将-replace 运算符组合在字符串上,将$(expression) 替换为字符串中的评估值,并将适当的扩展字符串与格式化字符串中的路径分隔符组合在一起。解决方法如下:

  1. 这是一个字符串,用双引号括起来表示。
  2. $(expression) 在第一次出现时计算为 $pdf.directory 的值,其中包含没有尾部反斜杠的父路径。如果$pdf 等于X:\IT\PDFtoTIFF\2\VKF_320150309DUPLICAAT.PDF,这将返回X:\IT\PDFtoTIFF\2
  3. 第二次出现的 $(表达式) 计算结果为 $pdf.basename -replace "VKF_(\w+)DUPLICAAT",'$1'。对于相同的 PDF,这等于 "VKF_320150309DUPLICAAT"-replace "VKF_(\w+)DUPLICAAT",'$1'。表达式中的圆括号正则表达式部分匹配“320150309”,并且该值分配给$1,然后将其放置而不是整个匹配区域。这样一来,您的名字就会被一次性去除“VKF_”和“DUPLICAAT”两个字母。
  4. 两个返回的字符串组合成一个,中间有一个反斜杠,后面是.tiff,结果是X:\IT\PDFtoTIFF\2\320150309.tiff

希望这将帮助您构建更好的脚本,以便在 Powershell 中使用字符串。

【讨论】:

  • 太好了,这完美!唯一没有重命名的是“VKF_GLOBAL PAGELBLDUPLICAAT”,我猜是因为它与其他的结构不同。你知道有没有办法解决它?非常感谢您的帮助。你已经做了这么多!
  • 找到了 :) 我添加了这些行: Dir *.tif |重命名项目 –NewName { $_.name –replace "DUPLICAAT",""} 目录 *.tif |重命名项目 –NewName { $_.name –replace "VKF_",""}
  • 该文件的基本名称中有一个空格。要包含空格,(\w+) 应替换为 ([\w\s]+)
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 2012-10-13
  • 2016-02-10
  • 2017-06-19
  • 1970-01-01
  • 2022-11-17
  • 2014-11-10
  • 2016-02-06
相关资源
最近更新 更多