Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将文档库中的多个PDF文件替换为新名称的Powershell脚本_Powershell_Sharepoint - Fatal编程技术网

用于将文档库中的多个PDF文件替换为新名称的Powershell脚本

用于将文档库中的多个PDF文件替换为新名称的Powershell脚本,powershell,sharepoint,Powershell,Sharepoint,我在文档库文件夹“Documents”下有多个文件,需要用新名称替换。 示例:hello123.pdf需要替换为hello789.pdf 下面是一个示例,我用filename_old使用现有的文件名,而filename_new使用新的名称集。如何在下面的示例中循环这两个文件名 $Web = Get-SPWeb "https://test.com" $DocLib = $Web.Lists["Documents"] $filename_

我在文档库文件夹“Documents”下有多个文件,需要用新名称替换。 示例:hello123.pdf需要替换为hello789.pdf 下面是一个示例,我用filename_old使用现有的文件名,而filename_new使用新的名称集。如何在下面的示例中循环这两个文件名

$Web = Get-SPWeb "https://test.com"
$DocLib = $Web.Lists["Documents"]           
$filename_old  = Get-Content 'F:\user\test1.txt' | old file names
$filename_new  = Get-Content 'F:\user\test2.txt' | new file names
$outputFile = 'F:\users\RenameResults.csv'

# loop through each item of the text file
$result = foreach($name in $filenames) {
    # try and find a listitem name that has the $name in it
    $renamed = foreach ($ListItem in ($DocLib.Items | Where-Object { $_["Name"] -like "*$name*" })) {
        $oldName = $ListItem["Name"]
        $newName = $name 
        $ListItem.File.CheckOut()
        $ListItem["Name"] = $newName
        $ListItem.Update()
        $ListItem.File.CheckIn($ListItem["Name"] + ".pdf")
        [PsCustomObject]@{
            SearchName      = $name
            OldListItemName = $oldName
            NewListItemName = $newName
        }
    }
    
    if (!$renamed) {
        [PsCustomObject]@{
            SearchName      = $name
            OldListItemName = 'Not found'
            NewListItemName = ''
        }        
    }
    else { $renamed }
}

# output to CSV file
$result | Export-Csv -Path $outputFile -UseCulture -NoTypeInformation

我不建议您使用foreach,因为这样您只能使用
Where对象{$\[“Name”]-如“*$Name*”}
来获取listitem,当库中有多个具有类似名称的文件时,将出现此问题

我的测试代码供您参考(但此方法需要保持两个文本中的顺序一致):


foreach($filename中的名称)
。。您尚未定义
$filenames
我认为,如果无法计算新名称和旧名称,则创建包含新名称和旧名称的输入CSV文件会更容易,而不是创建两个单独的列表。第2行和第3行的
|
后面是否有注释?在Powershell中,您可以使用
#
..+西奥说了些什么。
 $filename_old  = Get-Content 'C:\Temp\test1.txt' 
    $filename_new  = Get-Content 'C:\Temp\test2.txt'
    $outputFile = 'C:\Temp\RenameResults.csv'
    $Web = Get-SPWeb "http://sp"
    $DocLib = $Web.Lists["Documents"] 
    $listItemData=@()
    for($i=0;$i -lt $filename_old.Count;$i++){
    
        # try and find a listitem name that has the $name in it
        $renamed = foreach ($ListItem in ($DocLib.Items | Where-Object { $_["Name"] -eq $filename_old[$i] })) {
            $oldName = $ListItem["Name"]
            $newName = $filename_new[$i] 
            $ListItem.File.CheckOut()
            $ListItem["Name"] = $newName
            $ListItem.Update()
            $ListItem.File.CheckIn($ListItem["Name"] + ".pdf")
            $listItemData += New-Object PSObject -Property @{
                SearchName      = $name
                OldListItemName = $oldName
                NewListItemName = $newName
            }
            
        }
        
        if (!$renamed) {
            $listItemData += New-Object PSObject -Property @{
                SearchName      = $name
                OldListItemName = 'Not found'
                NewListItemName = ''
            }        
        }
        else { $renamed }
    }
    $listItemData | Export-Csv -Path $outputFile -UseCulture -NoTypeInformation