1

Тема: VBScript: вариант решения проблемы FTP IIS 6.0 и буквы "я"

Все знают проблему, что не возможно скачать файл с FTP, если в его имени (или имени папки) содержится буква "я". Для протокола этот символ (его код) говорит о конце передачи. При этом на символ "Я" такой реакции нет. План зрел не долго, захотел в ручную переименовать все файлы во всех FTP поддиректориях... Но организовав поиск по маске *я, понял, что переименовать 2500 файлов не смогу. Тогда подошел к проблеме иначе, а именно, написал vb-скрипт, который сам пройдется по подпапкам и заменит символ "я" на "Я". И это помогло!  Кому такой вариант решения проблемы приемлем, добро пожаловать, и прошу, пользуйтесь!

'=================================================================
'Скрипт, решающий проблемы, связанные с IIS FTP и буквой "я" |
'скрипт проходит по всем поддиректориям от указанной директории |
'и заменяет букву "я" на "Я" во всех именах файлов и дерикториях. |
'=================================================================


Sub RunSubFolders (FolderInto) 'процедура переименования

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(FolderInto)

For Each iFile in Folder.Files 'цикл проверки и переименования всех файлов в текущей директории
NameFile = Mid(iFile, InStrRev(iFile,"\")+1)
If Detect_ya(NameFile) Then
On Error Resume Next
FSO.MoveFile iFile, Mid(iFile,1,InStrRev(iFile,"\")) + convert_ya(NameFile)
End If
Next

On Error Resume Next 
For Each iSubFolder in Folder.SubFolders 'цикл проверки и переименования всех папок в текущей директории


NameFolder = Mid(iSubFolder, InStrRev(iSubFolder,"\")+1)
If Detect_ya(NameFolder) Then
On Error Resume Next
FSO.MoveFolder iSUbFolder, Mid(iSubFolder,1,InStrRev(iSubFolder,"\")) + convert_ya(NameFolder)
End If
RunSubFolders (iSUbFolder)
Next
End Sub


function convert_ya(str_in) 'функция повышения регистора буквы "я"
str_out = Replace(str_in,"я","Я")
convert_ya = str_out
end function

function Detect_ya(Str_in) 'функция обнаружения буквы "я" в строке
If (InStr(Str_in,"я")<>0) then
Detect_ya = True
else
Detect_ya = False
End If
End Function


RootFTPFolder = "C:\Test_Folder" 'Корневая директория FTP сервера
Call RunSubFolders (RootFTPFolder)

У меня переименование 2500 файлов и папок заняло 5 минут.
Как дальнейшее решение, чтобы не объяснять пользователям, что с "Я" создавать файлы не стоит, я просто запланировал выполнение этого скрипта 1 раз в сутки, ночью.