SharePoint et OneDrive de Microsoft ne gèrent pas certains caractères spéciaux dans les noms de fichiers notamment les caractères & { } ~ # % et ceux interdits dans l’explorateur de fichiers, ou les fichiers dont le nom commence / finit par un « . » ou contenant des points consécutifs dans leur nom.
Alors j’ai trouvé ce script PowerShell qui peut bien vous aider !
function Check-IllegalCharacters ($Path, [switch]$Fix, [switch]$Verbose)
{
Write-Host Checking files in $Path, please wait...
#Get all files and folders under the path specified
$items = Get-ChildItem -Path $Path -Recurse
foreach ($item in $items)
{
#Check if the item is a file or a folder
if ($item.PSIsContainer) { $type = "Folder" }
else { $type = "File" }
#Report item has been found if verbose mode is selected
if ($Verbose) { Write-Host Found a $type called $item.FullName }
#Check if item name is 128 characters or more in length
if ($item.Name.Length -gt 127)
{
Write-Host $type $item.Name is 128 characters or over and will need to be truncated -ForegroundColor Red
}
else
{
#Got this from http://powershell.com/cs/blogs/tips/archive/2011/05/20/finding-multiple-regex-matches.aspx
$illegalChars = '[&{}~#%]'
filter Matches($illegalChars)
{
$item.Name | Select-String -AllMatches $illegalChars |
Select-Object -ExpandProperty Matches
Select-Object -ExpandProperty Values
}
#Replace illegal characters with legal characters where found
$newFileName = $item.Name
Matches $illegalChars | ForEach-Object {
Write-Host $type $item.FullName has the illegal character $_.Value -ForegroundColor Red
#These characters may be used on the file system but not SharePoint
if ($_.Value -match "&") { $newFileName = ($newFileName -replace "&", "and") }
if ($_.Value -match "{") { $newFileName = ($newFileName -replace "{", "(") }
if ($_.Value -match "}") { $newFileName = ($newFileName -replace "}", ")") }
if ($_.Value -match "~") { $newFileName = ($newFileName -replace "~", "-") }
if ($_.Value -match "#") { $newFileName = ($newFileName -replace "#", "") }
if ($_.Value -match "%") { $newFileName = ($newFileName -replace "%", "") }
}
#Check for start, end and double periods
if ($newFileName.StartsWith(".")) { Write-Host $type $item.FullName starts with a period -ForegroundColor red }
while ($newFileName.StartsWith(".")) { $newFileName = $newFileName.TrimStart(".") }
if ($newFileName.EndsWith(".")) { Write-Host $type $item.FullName ends with a period -ForegroundColor Red }
while ($newFileName.EndsWith(".")) { $newFileName = $newFileName.TrimEnd(".") }
if ($newFileName.Contains("..")) { Write-Host $type $item.FullName contains double periods -ForegroundColor red }
while ($newFileName.Contains("..")) { $newFileName = $newFileName.Replace("..", ".") }
#Fix file and folder names if found and the Fix switch is specified
if (($newFileName -ne $item.Name) -and ($Fix))
{
Rename-Item $item.FullName -NewName ($newFileName)
Write-Host $type $item.Name has been changed to $newFileName -ForegroundColor Blue
}
}
}
}
Ce script provient du blog suivant.
Pour le lancer ensuite ces commandes s’offrent à vous :
Check-IllegalCharacters -Path C:\Files
Celui là ne fait que vérifier et reporter les fichiers avec des noms gênants. L’option -Verbose elle liste .. tous les fichiers vérifiés.
Check-IllegalCharacters -Path C:\Files -Fix