Ни для кого не секрет, что в Sharepoint’е есть довольно — таки большой список ограничений на расширения файлов и специальные символы в названиях.
Перебирать вручную несколько тысяч файлов очень тяжело, и я для себя написал небольшой скрипт на Autoit’e, который просматривает указанную папку и убирает все запрещенные символы из имён файлов и папок, а так же добавляет расширение .illegal к запрещённым типам файлов.
Для каждой найденой ошибки пишется лог в папке со скриптом.
Итак, сам код:
#include <array.au3> #include <file.au3> FileDelete(@ScriptDir & "\ОШИБКИ.txt") FileDelete(@ScriptDir & "\OK.txt") FileOpen(@ScriptDir & "\ОШИБКИ.txt", 136) FileOpen(@ScriptDir & "\OK.txt", 136) $pattern2 = '.*?\~|.*?\#|.*?\%|.*?\&|.*?\*|.*?\{|.*?\}|.*? \<|.*?\>|.*?\?|.*?\/|.*?\+|.*?\||.*?\"' $pattern3 = '\~|\#|\%|\&|\*|\{|\}|\<|\>|\?|\/|\+|\"' $pattern = ".*?(\.ashx)|.*?(\.asmx)|.*?(\.asp)|.*?(\.aspq)|.*?(\.axd)|.*?(\.cshtm)|.*?(\.chtml)|.*?(\.json)|.*?(\.rem)|.*?(\.shtm)|.*?(\.shtml)|.*?(\.soap)|.*?(\.stm)|.*?(\.svc)|.*?(\.vbhtm)|.*?(\.vbhtml)|.*?(\.xamlx)|.*?(\.ade)|.*?(\.adp)|.*?(\.asa)|.*?(\.ashx)|.*?(\.asmx)|.*?(\.asp)|.*?(\.bas)|.*?(\.bat)|.*?(\.cdx)|.*?(\.cer)|.*?(\.chm)|.*?(\.class)|.*?(\.cmd)|.*?(\.com)|.*?(\.config)|.*?(\.cnt)|.*?(\.cpl)|.*?(\.crt)|.*?(\.csh)|.*?(\.der)|.*?(\.dll)|.*?(\.exe)|.*?(\.fxp)|.*?(\.gadget)|.*?(\.grp)|.*?(\.hlp)|.*?(\.hpj)|.*?(\.hta)|.*?(\.htr)|.*?(\.htw)|.*?(\.ida)|.*?(\.idc)|.*?(\.idq)|.*?(\.ins)|.*?(\.isp)|.*?(\.its)|.*?(\.jse)|.*?(\.json)|.*?(\.ksh)|.*?(\.lnk)|.*?(\.mad)|.*?(\.maf)|.*?(\.mag)|.*?(\.mam)|.*?(\.maq)|.*?(\.mar)|.*?(\.mas)|.*?(\.mat)|.*?(\.mau)|.*?(\.mav)|.*?(\.maw)|.*?(\.mcf)|.*?(\.mda)|.*?(\.mdb)|.*?(\.mde)|.*?(\.mdt)|.*?(\.mdw)|.*?(\.mdz)|.*?(\.ms-one-stub)|.*?(\.msc)|.*?(\.msh)|.*?(\.msh1)|.*?(\.msh1xml)|.*?(\.msh2)|.*?(\.msh2xml)|.*?(\.mshxml)|.*?(\.msi)|.*?(\.msp)|.*?(\.mst)|.*?(\.ops)|.*?(\.pcd)|.*?(\.pif)|.*?(\.pl)|.*?(\.prf)|.*?(\.prg)|.*?(\.printer)|.*?(\.ps1)|.*?(\.ps1xml)|.*?(\.ps2)|.*?(\.ps2xml)|.*?(\.psc1)|.*?(\.psc2)|.*?(\.pst)|.*?(\.reg)|.*?(\.rem)|.*?(\.scf)|.*?(\.scr)|.*?(\.sct)|.*?(\.shb)|.*?(\.shs)|.*?(\.shtm)|.*?(\.shtml)|.*?(\.soap)|.*?(\.stm)|.*?(\.svc)|.*?(\.url)|.*?(\.vb)|.*?(\.vbe)|.*?(\.vbs)|.*?(\.vsix)|.*?(\.ws)|.*?(\.wsc)|.*?(\.wsf)|.*?(\.wsh)|.*?(\.xamlx)" open_dir() Func open_dir() Local Const $smessage = "Select a folder" Global $sfileselectfolder = FileSelectFolder($smessage, "") If @error Then MsgBox($mb_systemmodal, "", "No folder was selected.") Exit Else MsgBox($mb_systemmodal, "", "You chose the following folder:" & @CRLF & $sfileselectfolder) EndIf EndFunc $Longerror = 0 $Nameerror = 0 $Shorterror = 0 $Typeerror = 0 $okfiles = 0 $n = 0 $t = 0 Dim $filearray[1000000] Global $way = StringLen($sfileselectfolder) _filelist($sfileselectfolder) Func _filelist($sfileselectfolder) $search = FileFindFirstFile($sfileselectfolder & "\*.*") If $search = -1 Then Return -1 While 1 $n = $n + 1 $file = FileFindNextFile($search) If @error Then FileClose($search) Return ElseIf $file = "." OR $file = ".." Then ContinueLoop ElseIf StringInStr(FileGetAttrib($sfileselectfolder & "\" & $file), "D") Then _filelist($sfileselectfolder & "\" & $file) EndIf $filearray[$n] = ($sfileselectfolder & "\" & $file) $full = StringLen(FileGetLongName($filearray[$n])) - $way $short = StringLen($file) If $full > 256 Then $t = $t + 1 FileWrite(@ScriptDir & "\ОШИБКИ.txt", "Слишком длинный путь к файлу ("&$full&")/256 - " & $filearray[$n] & @CRLF) $Longerror = $Longerror +1 EndIf If $short > 127 Then $t = $t + 1 FileWrite(@ScriptDir & "\ОШИБКИ.txt", "Слишком длинное имя файла ("&$full&")/127 - " & $filearray[$n] & @CRLF) $Shorterror = $Shorterror +1 EndIf If StringRegExp($filearray[$n], $pattern) = 1 Then ;ConsoleWrite($filearray[$n] & " GET IT" & @CRLF) FileMove($filearray[$n], $filearray[$n] & ".illegal", 8) FileWrite(@ScriptDir & "\ОШИБКИ.txt", "Запрещённый тип файла! - " & $filearray[$n] & @CRLF) $Typeerror = $Typeerror + 1 Else FileWrite(@ScriptDir & "\OK.txt", " ОК" & $filearray[$n] & @CRLF) $okfiles = $okfiles +1 EndIf If StringRegExp($filearray[$n], $pattern2) = 1 Then ;ConsoleWrite($filearray[$n] & " GET IT" & @CRLF) $new = StringRegExpReplace($filearray[$n], $pattern3, "") ;ConsoleWrite($new) FileMove($filearray[$n], $new, 8) FileWrite(@ScriptDir & "\ОШИБКИ.txt", "Запрещённые символы в имени файла или папки " & $filearray[$n] & " Должно быть: " & $new & @CRLF) $Nameerror = $Nameerror + 1 EndIf WEnd EndFunc FileClose(@ScriptDir & "\ОШИБКИ.txt") FileClose(@ScriptDir & "\OK.txt") MsgBox(4096, "Отчёт", "Всё сделано" &@CRLF& "Всего файлов и папок проанализировано "&$n&@CRLF &"Файов с запрещёнными символами: "&$Nameerror&@CRLF&"Слишком длинные пути к файлу: "&$Longerror&@CRLF&"Слишком длинное имя файла: "&$Shorterror&@CRLF&"Запрещённых файлов: "&$Typeerror)