![]()  | 
    Neste artigo vou mostrar como podemos renomear pastas usando a linguagem VB .NET. | 
				
				![]()  | 
  
Você já precisou alterar o nome de diversas pastas que iniciam com um determinado caractere ?
Vamos supor que você salvou diversos arquivos em pastas e essas pastas foram geradas iniciando com o caractere _ . Exemplo: _pasta1, _pasta2, pasta2, etc...
Quando você tem dezenas ou centenas de pastas nessa situação renomear o nome das pastas manualmente pode ser tedioso.
Vou mostrar como podemos criar uma pequena aplicação usando VB .NET que faz esse trabalho.
Essa aplicação vai fazer o seguinte:
Permitir que o usuário selecione uma pasta onde estão os arquivos a serem renomeados
Informar o caractere no arquivo que deseja substituir
Informar o caractere que vai ser usado para substituir
Como o projeto foi desenvolvido para atender uma demanda ele foi feito a toque de caixa e vai precisar ser otimizado.
A otimização eu vou deixar a cargo de cada de um de vocês...
Então ao trabalho...
Recursos usados:
Visual Studio Community 2017 update 15.5
Criando o projeto no Visual Studio 2017 Community
Abra o Visual Studio Community 2017 e clique em New Project;
Selecione Visual Basic, o template Windows Classic Desktop e a seguir Windows Forms App(.NET Framework);
Informe o nome Vbn_Renomar e clique no botão OK;
A seguir inclua no formulário padrão Form1.vb os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:

Definindo o código do formulário
1- Evento Load do formulário
No evento Load do formulário vamos definir o código abaixo que define os valores dos caracteres que serão usados na alteração de nome das pastas:
		 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Text = My.Application.Info.AssemblyName.ToString & " - Macoratti .net"
        txtPasta.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures).ToString
        txtCaractereLocalizar.Text = "_"
        txtCaractereSubstituir.Text = "-"
    End Sub
		 | 
	
Esse será o modelo de domínio da nossa aplicação.
2- Evento Click do botão Selecionar Pasta
Vamos incluir no evento Click do botão Selecionar Pasta o código que permite o usuário escolhar uma pasta:
		Private Sub btnSelecionarPasta_Click(sender As Object, e As EventArgs) Handles btnSelecionarPasta.Click
        Using oFolderBrowserDialog As New FolderBrowserDialog
            If oFolderBrowserDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
                If oFolderBrowserDialog.SelectedPath.Length > 0 Then
                    txtPasta.Text = oFolderBrowserDialog.SelectedPath
                End If
            End If
        End Using
    End Sub
		 | 
	
3- Evento Click do botão Iniciar
No evento Click do botão Iniciar temos o código que vai invocar o método EncontrarRenomearArquivos() :
		 Private Sub btnIniciar_Click(sender As Object, e As EventArgs) Handles btnIniciar.Click
        Dim caractere_Valido As Boolean = False
		        If Not txtCaractereSubstituir.Text.Contains("\") Then
            caractere_Valido = True
        End If
		        If caractere_Valido = True Then
            If EncontrarRenomearArquivos(txtPasta.Text, "*" & txtCaractereLocalizar.Text & "*") Then
                MessageBox.Show("Operação concluída com sucesso...")
                Process.Start("explorer.exe", txtPasta.Text)
            Else
                MessageBox.Show("Não foi possível realizar a operação ...")
            End If
        End If
    End Sub
		 | 
	
3- Código do método EncontrarRenomearArquivos
Abaixo temos o código do método EncontrarRenomearArquivos:
		 Private Function EncontrarRenomearArquivos(Optional caminhoDiretorio As String = "c:\dados\teste\", 
Optional StringAProcurar As String = "*.txt") As Boolean
		        Dim caminhoValido As Boolean = True
        '----------------------------------------------
        ' VERIFICA SE CAMINHO É VÁLIDO
        '----------------------------------------------
        'remove espaco antes e depois
        caminhoDiretorio = Trim(caminhoDiretorio)
        'verifica se o tamanho é zero
        If Not Len(caminhoDiretorio) > 0 Then
            caminhoValido = False
        End If
        'verifica se o caractere é válido
        ' \ * | : ? < > / exceto o \ que o separador de pasta
        ' e * que indica para ignorar tudo dentro de outros chars
        If InStr(caminhoDiretorio, "|", CompareMethod.Binary) > 0 Then
            caminhoValido = False
        End If
        If InStr(caminhoDiretorio, ">", CompareMethod.Binary) > 0 Then
            caminhoValido = False
        End If
        If InStr(caminhoDiretorio, "<", CompareMethod.Binary) > 0 Then
            caminhoValido = False
        End If
        If InStr(caminhoDiretorio, "?", CompareMethod.Binary) > 0 Then
            caminhoValido = False
        End If
        If InStr(caminhoDiretorio, ":", CompareMethod.Binary) = 2 Then
            Dim str_temp As String = caminhoDiretorio.Substring(2, Len(caminhoDiretorio) - 2)
            If InStr(str_temp, ":", CompareMethod.Binary) > 0 Then
                caminhoValido = False
            End If
        End If
        If InStr(caminhoDiretorio, "*", CompareMethod.Binary) > 0 Then
            caminhoValido = False
        End If
		         Dim SegurancaValida As Boolean = True
		        '------------------------------------------Código comentado---------------------------------
        ' este código inclui mais segurança ao processo permitindo que somente usuários pertencente
        ' ao grupo dos administradores possam realizar essa operação
        '---------------------------------------------------------------------------------------------------------
		        'Dim oDirectorySecurity As System.Security.AccessControl.DirectorySecurity
        'Dim oAuthorizationRuleCollection As System.Security.AccessControl.AuthorizationRuleCollection
        'Dim oRule As System.Security.AccessControl.FileSystemAccessRule
        
		        'oDirectorySecurity = IO.Directory.GetAccessControl(caminhoDiretorio)
		        'oAuthorizationRuleCollection = oDirectorySecurity.GetAccessRules(
        '    True, True, Type.GetType("System.Security.Principal.NTAccount"))
		        'For Each oRule In oAuthorizationRuleCollection
        '    If oRule.FileSystemRights = Security.AccessControl.FileSystemRights.FullControl Then
        '        If InStr(oRule.IdentityReference.Value, My.User.Name) > 0 Then
        '            SegurancaValida = True
        '        End If
        '    End If
        'Next
		        Dim Is_Pasta_Atalho As Boolean = False
		        If caminhoDiretorio.StartsWith("c:\Users", True, System.Globalization.CultureInfo.CurrentCulture) Then
            Is_Pasta_Atalho = True
        End If
		        If caminhoValido = True And SegurancaValida = True Then
            For Each diretorioEncontrado As String In My.Computer.FileSystem.GetDirectories(caminhoDiretorio, 
FileIO.SearchOption.SearchTopLevelOnly, StringAProcurar)
		                Dim aArray() As String = diretorioEncontrado.Split("\")
                Dim Pasta1 As String = aArray(aArray.Length - 1)
                Dim Pasta2 As String = Pasta1.Replace(txtCaractereLocalizar.Text, txtCaractereSubstituir.Text)
                Try
                    My.Computer.FileSystem.RenameDirectory(diretorioEncontrado, Pasta2)
                Catch ex1 As System.IO.PathTooLongException
                    MessageBox.Show("Erro " & ex1.Message)
                Catch ex As Exception
                    MessageBox.Show("Erro " & ex.Message)
                End Try
            Next
            If chkIncluiSubPasta.Checked = True Then
		                For Each diretorioEncontrado As String In My.Computer.FileSystem.GetDirectories(
                    caminhoDiretorio, FileIO.SearchOption.SearchTopLevelOnly)
		                    EncontrarRenomearArquivos(diretorioEncontrado, StringAProcurar) ' busca recursiva
		                Next
            End If
            Return True
        Else
            MessageBox.Show("caminhoValido =" & caminhoValido & vbCrLf & "SegurancaValida =" & SegurancaValida)
            Return False
        End If
		    End Function
		 | 
	
Executando um projeto e usando a pasta c:\dados\teste para verificar a aplicação temos abaixo o resultado obtido onde renomeamos as pastas que iniciavam com o caractere _ trocando-o pelo caractere -.

O código do projeto precisa ser otimizado.
Que tal praticar as boas práticas e ajeitar o código ???
Pegue o 
projeto completo aqui : 
 
 Vbn_Renomear.zip 
(Disse Jesus)"Mas a 
hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito 
e em verdade; porque o Pai procura a tais que assim o adorem."
João 4:23
| 
    
    Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! 
 Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?  | 
  
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET
![]()
Visual Basic - Operações com arquivos e diretórios - Macoratti.net
VB.NET - Criar, Ler, Escrever, Copiar e Deletar arquivos Textos ...
VB.NET - Lendo e escrevendo em arquivo Textos - Macoratti.net