none
Renomear pastas com caracteres especiais RRS feed

  • Pergunta

  • Olá Pessoal,

    Neste fim de semana migramos o File Sever da empresa onde administro a rede, o antigo s.o era novell e agora é windows.
    A migração ocorreu perfeitamente porém pastas com caracteres especiais foram importadas com caracteres estranhos.

    Ex: INSPEÇ╟O em vez de INSPEÇÃO

    Alguém conhece algum script para renomear pastas e corrigir acentos?

    Desde já agradeço
    Valew!
    quarta-feira, 25 de março de 2009 15:08

Respostas

  • Olá,

    Sério,

    Estranho... eu testei ontem em 3 micros (até no vista que é chatinho).

    Alterei o script aqui, pra dar uns alerta na tela.. aí você posta pra mim.

    strPasta="C:\teste\"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if

    getPasta folder.path


    end sub

    Sub GetPasta(caminho)

    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = caractere Then
          textook = Replace(caractere, Mid(caminho, i, 1),substituir)
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    wscript.echo "Origem : " & caminho
    wscript.echo "Destino : " & Texto
    FSO.MoveFolder caminho , Texto
    End sub


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    terça-feira, 31 de março de 2009 12:03
  • Olá Hugo,

    Segue abaixo o script para renomear as pastas (corrigido o problema de niveis)

    strPasta="C:\teste"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    Else
    '   getPasta folder.path, folder.name
    end if

    getPasta folder.path , folder.name



    end sub

    Sub GetPasta(caminho,nome)
    For i = 1 To Len(nome)
       if Mid(nome, i, 1) = caractere Then
          textook = Replace(caractere, Mid(nome, i, 1),substituir)
       Else
          textook = Mid(nome, i, 1)
       End if
       Texto = texto & textook
    Next
    Texto = Left(caminho,(Len(caminho)- Len(nome))) & Texto
    FSO.MoveFolder caminho , Texto
    End sub

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 1 de abril de 2009 12:16

Todas as Respostas

  • Olá,


    infelizmente essa não vai ser fácil. Você talvez consiga se tiver uma espécie de dicionário, mas dado que os arquivos foram criados no Windows com os nomes adulterados, fica bastante complicado. O problema está no encoding utilizado para os arquivos no Linux, que provavelmente era (no seu caso) diferente dos utilizados no Windows (UTF-8). Linux mais modernos já usam UTF-8 por padráo. Isso devia ter sido levantado no inicio da migração, para evitar problemas.

    Talvez alguma brincadeira com .Net e o Text.Encodings ajude... ainda mais se você tiver ainda a lista de arquivos/pastas no servidor antigo, mas imediatamente usando scripts simples não tem como não.


    []s,


    Vinicius Canto
    MVP Admin Frameworks
    http://viniciuscanto.blogspot.com

    Vinicius Canto MVP Admin Frameworks Blog: http://viniciuscanto.blogspot.com
    quinta-feira, 26 de março de 2009 04:18
    Moderador
  • Então complicou... hehehehe

    :(
    segunda-feira, 30 de março de 2009 11:19
  • Mas tem como eu fazer um find and replace para pastas e arquivos?
    tipo, encontrar caracteres ╞ e substituir por ã, dai eu criaria as regras...
    Alguém ajuda?

    Valew
    segunda-feira, 30 de março de 2009 13:09
  • Olá,

    Faça o teste no script abaixo:


    strPasta="C:\teste"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if

    getPasta folder.path


    end sub

    Sub GetPasta(caminho)

    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = caractere Then
          textook = Replace(caractere, Mid(caminho, i, 1),substituir)
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    FSO.MoveFolder caminho , Texto
    End sub


    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique a resposta
    segunda-feira, 30 de março de 2009 15:04
  • Jesiel,

    Este seria apenas para pasta correto?
    Preciso para arquivos também, e preciso que por exemplo, ele verifique uma unidade mapeada, e troque todos os caracteres de pastas, subpastas e arqivos por caracteres que eu definir.

    Será possível?

    Desde já agradeço..
    segunda-feira, 30 de março de 2009 16:30
  • Olá,

    Após você ter executado o script anterior que eu te passei, execute o script abaixo:

    strPasta="C:\teste"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if

    for each file in folder.files
       getArquivo file.path
    Next   

    end sub

    Sub GetArquivo(caminho)

    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = caractere Then
          textook = Replace(caractere, Mid(caminho, i, 1),substituir)
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    FSO.Movefile caminho , Texto
    End sub



    Quanto à dúvida da pasta mapeada, é só você alterar o caminho onde está c:\teste para o caminho da pasta mapeada Exemplo: z:\

    Poste os resultados


    Até mais,

    Jesiel

    Obs.: Se útil, classifique a resposta
    segunda-feira, 30 de março de 2009 17:48
  • Olá Jesiel,

    Obrigado pela ajuda, mas está dando um erro

    Linha 36
    Caract. 1
    Erro: Caminho não encontrado

    Obrigado.
    segunda-feira, 30 de março de 2009 18:10
  • Olá,

    Você executou o script de renomear pasta primeiro???

    Arruma os nomes das pastas primeiro... depois você arruma os arquivos.

    Fiz os testes aqui e funcionou... porém em ambiente teste.

    Poste os resultados

    Jesiel

    Obs.: Se útil, classifique a resposta
    segunda-feira, 30 de março de 2009 18:18
  • Jesiel,

    Executei os dois scripts e os dois deram o mesmo problema,
    Criei a pasta teste no c:\
    e dentro dela criei a pasta #pasta
    ele deveria renomear para spasta coreto?

    Obrigado pela ajuda

    segunda-feira, 30 de março de 2009 19:20
  • Olá,

    Isso mesmo...

    Como eu fiz: criei a pasta c:\teste

    Dentro da pasta c:\teste criei as pastas: p#asta, Te#te, pas$ou

    Dentro de cada pasta criei um arquivo: arquiv#o.txt

    Executei o script de pasta primeiro depois o script de arquivo.

    Renomeou tudo sem problemas...

    Faça este teste e nos retorne.

    Até mais,

    Jesiel
    segunda-feira, 30 de março de 2009 19:27
  • Que estranho,

    Retrna o erro:

    LINHA 35
    ERRO: CAMINHO NAO ENCONTRADO
    CODIGO 800A004C
    ORIGEM: ERRO DE TEMPO DE EXECUÇÃO DO MICROSOFT VBSCRIPT

    será que é meu computador?
    segunda-feira, 30 de março de 2009 19:37
  • Testei em outro computador e ocorre exatamente o mesmo erro, para os 2 scripts.
    segunda-feira, 30 de março de 2009 20:13
  • Olá,

    Estranho, testei em outro micro e funcionou.

    1 - Crie uma pasta no c: chamada teste (tudo minusculo)

    2 - Dentro de teste crie uma pasta chamada te#te

    3 - Execute o script abaixo:

    strPasta="C:\teste\"
    set FSo = CreateObject("Scripting.FileSystemObject")
    caractere = "#"
    substituir = "s"
    RenPasta(strPasta)
    Sub RenPasta(Pasta)
    set folder = FSO.getFolder (Pasta)
    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if
    getPasta folder.path
    end sub
    Sub GetPasta(caminho)
    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = caractere Then
          textook = Replace(caractere, Mid(caminho, i, 1),substituir)
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    FSO.MoveFolder caminho , Texto
    End sub


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 30 de março de 2009 20:59
  • Sei lá Jesiel,

    Fiz exatamente isto em 3 computadores, 2k, xp, vista e não funciona de jeito nenhum.
    terça-feira, 31 de março de 2009 11:51
  • Olá,

    Sério,

    Estranho... eu testei ontem em 3 micros (até no vista que é chatinho).

    Alterei o script aqui, pra dar uns alerta na tela.. aí você posta pra mim.

    strPasta="C:\teste\"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if

    getPasta folder.path


    end sub

    Sub GetPasta(caminho)

    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = caractere Then
          textook = Replace(caractere, Mid(caminho, i, 1),substituir)
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    wscript.echo "Origem : " & caminho
    wscript.echo "Destino : " & Texto
    FSO.MoveFolder caminho , Texto
    End sub


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    terça-feira, 31 de março de 2009 12:03
  • Jesiel,

    Pra variar, vc resolveu meu problema novamente!

    Muito obrigado mesmo!

    Abraços
    terça-feira, 31 de março de 2009 14:30
  • Jesiel,

    Só mais uma coisa,

    tem como eu colocar vários simbolos no mesmo script:
    caractere = "#"
    é so colocar virgula e ir adicionando?

    Obrigado
    terça-feira, 31 de março de 2009 14:41
  • Olá Hugo...

    Bacana que funcionou...

    Não é só separar por virgula não...

    Vou fazer outro script hoje e te passo...

    Até mais,

    Jesiel
    terça-feira, 31 de março de 2009 17:20
  • Jesiel,

    Infelizmente não está funcionando não,
    O problema se dá quando tem uma sub pasta,
    criei a estrutura: C:\teste\test#\nova#
    Ele não renomeia arquivos e nem pastas.

    Se puder me ajudar

    Obrigado
    terça-feira, 31 de março de 2009 17:23
  • Olá,

    É porque você tem que primeiro de tudo executar para renomear pastass...

    São 2 programas... um para pasta e outro para arquivos...

    Segue abaixo o programa que altera mais de um caractere (ESSE PROGRAMA SÓ ALTERA ARQUIVOS) AS PASTAS JÁ DEVEM QUE ESTAR CORRIGIDAS:

    Dim caractere(3), substituir(3)

    'AQUI VOCÊ COLOCA OS CARACTERES ESPECIAIS
    caractere(0) = "#"
    caractere(1) = "$"
    caractere(2) = "@"

    'AQUI VOCÊ COLOCA POR QUEM VAI SUBSTITUIR, NO EXEMPLO ABAIXO O CARACTERE # VAI TROCAR POR X
    substituir(0) = "x"
    substituir(1) = "y"
    substituir(2) = "z"

    'AQUI VOCÊ COLOCA O CAMINHO DA PASTA ONDE IRÁ EXECUTAR. (A PASTA NAO PODE TER CARACTER ESPECIAL)
    strPasta="c:\teste"

    set FSo = CreateObject("Scripting.FileSystemObject")

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    end if

    For a= 0 to UBOUND(Caractere)
       for each file in folder.files
           getArquivo file.path,a
       Next
    Next   

    end sub

    Sub GetArquivo(caminho,nSimb)
    For i = 1 To Len(caminho)
       if Mid(caminho, i, 1) = Caractere(nSimb) Then
          textook = Replace(Caractere(nSimb), Mid(caminho, i, 1),substituir(nSimb))
       Else
          textook = Mid(caminho, i, 1)
       End if
       Texto = texto & textook
    Next
    FSO.Movefile caminho , Texto
    End sub


    Poste os resultados.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    terça-feira, 31 de março de 2009 19:02
  • Jesiel,

    Estou tentando corrigir a nomenclatura em um file server que a estrutura é muito grande,
    Mesmo executando primeiro o script das pastas, ele retorna um erro que o caminho não foi encontrado.
    OBS. A pasta está no meu micro e com permissões totais para meu usuário.
    terça-feira, 31 de março de 2009 20:21
  • Percebi que quando há pastas no 3° nivel com nomenclatura errada dá problema.

    Obrigado pela ajuda.
    terça-feira, 31 de março de 2009 20:28
  • Olá Hugo,

    Segue abaixo o script para renomear as pastas (corrigido o problema de niveis)

    strPasta="C:\teste"

    set FSo = CreateObject("Scripting.FileSystemObject")

    caractere = "#"
    substituir = "s"

    RenPasta(strPasta)

    Sub RenPasta(Pasta)

    set folder = FSO.getFolder (Pasta)

    if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       RenPasta SubFolder
      next
    Else
    '   getPasta folder.path, folder.name
    end if

    getPasta folder.path , folder.name



    end sub

    Sub GetPasta(caminho,nome)
    For i = 1 To Len(nome)
       if Mid(nome, i, 1) = caractere Then
          textook = Replace(caractere, Mid(nome, i, 1),substituir)
       Else
          textook = Mid(nome, i, 1)
       End if
       Texto = texto & textook
    Next
    Texto = Left(caminho,(Len(caminho)- Len(nome))) & Texto
    FSO.MoveFolder caminho , Texto
    End sub

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 1 de abril de 2009 12:16
  • Olá,


    Você sabe ao menos o encoding que foi usado na hora de escrever os arquivos?
    E a partição onde esses arquivos estão? É NTFS ou FAT? 

    Se o encoding foi preservado o problema é só na exibição... e aí tem conserto, sem precisar mapear caractere nenhum.


    []s,

    Vinicius

    Vinicius Canto MVP Admin Frameworks Blog: http://viniciuscanto.blogspot.com
    quinta-feira, 2 de abril de 2009 03:04
    Moderador
  • Olá Jesiel,

    Funcionou perfeitamente! Agora sim

    Obrigado.
    quinta-feira, 2 de abril de 2009 12:09
  • Jesiel,

    Revivendo este topico,
    Será que tem como ao final do script ele listar quantas pastas e arquivos foram alteradas.

    Ou pelo menos exibir uma mensagem iformando que o processo terminou?

    Valew!
    sexta-feira, 17 de abril de 2009 14:44