如何搜索PDF文件并使用Powershell移动它们

时间:2019-09-13 14:27:35

标签: powershell

我的文件夹中有很多子文件夹,其中包含大量PDF文件。在这堆文件中,我需要找到带有特定字符串的文件,然后将其移动到新的目的地。

对于搜索过程,我已经有一段很好的代码,可以为我提供所需的文件(创建者要感谢)-现在我需要帮助,以将此代码与移动功能结合在一起。以下代码找到的所有文件都应移至新目的地。

$searchString = "text i need to find" 
$searchPath = "C:\test" 
$sql = "SELECT System.ItemPathDisplay, System.DateModified, " 
+ "System.Size, System.FileExtension FROM SYSTEMINDEX " 
+ "WHERE SCOPE = '$searchPath' AND FREETEXT('$searchstring')" 
$provider = "provider=search.collatordso;extended properties=’application=windows’;"  
$connector = new-object system.data.oledb.oledbdataadapter -argument $sql, $provider  
$dataset = new-object system.data.dataset  
if ($connector.fill($dataset)) { $dataset.tables[0] } 

输出类似于:

SYSTEM.ITEMPATHDISPLAY SYSTEM.DATEMODIFIED SYSTEM.SIZE SYSTEM.FILEEXTENSION
---------------------- ------------------- ----------- --------------------
C:\test\file.pdf       27.08.2019 19:14:57 17119       .pdf   

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。对于任何有兴趣的人。

注意:$ searchPath必须是运行脚本的计算机上的本地驱动器,因为Windows搜索需要对PDF文件进行索引。为此,您可能必须安装iFilter:https://superuser.com/questions/402673/how-to-search-inside-pdfs-with-windows-search

$searchString = "Merkblatt für nüchtern eintretende Patienten" 
$searchPath = "Y:\" 
$targetPath = "\\Server\Path\folder"

$sql =  "SELECT System.ItemPathDisplay, System.DateModified, " + 
        "System.Size, System.FileExtension FROM SYSTEMINDEX " + 
        "WHERE SCOPE = '$searchPath' AND FREETEXT('$searchstring')" 
$provider = "provider=search.collatordso;extended properties=’application=windows’;"  
$connector = new-object system.data.oledb.oledbdataadapter -argument $sql, $provider  
$dataset = new-object system.data.dataset  
if ($connector.fill($dataset)) { 
   #$dataset.tables[0] 
   foreach ( $Row in $dataset.tables[0].Rows) {
      $targetFile = $Row[0] -replace "^Y:", $targetPath
      $targetSubfolder = Split-Path -Path $targetFile
      #write-host "Targetfile : $targetFile"
      #write-host "Moving: $($Row[0])"
      Move-Item -Path $($Row[0]) -Destination $targetPath -Force
   }
}