用于将文档库中的多个PDF文件替换为新名称的Powershell脚本
我在文档库文件夹“Documents”下有多个文件,需要用新名称替换。 示例:hello123.pdf需要替换为hello789.pdf 下面是一个示例,我用filename_old使用现有的文件名,而filename_new使用新的名称集。如何在下面的示例中循环这两个文件名用于将文档库中的多个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_
$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