Necesito renombrar cientos de archivos de una carpeta.

Estoy con un gran problema.

Actualmente trabajamos con un servidor que no acepta ni los acéntos ni las ñ,

En el mismo se colocan los presupuestos, y el problema es que en los últimos diez años se han escrito los archivos con acento y se genera un error.

Me gustaría saber si existirá alguna manera de renombrarlos a todos de una manera más rapida, por que ahora lo estoy haciendo de forma manual.

Desde ya sumamente agradecido,

2 respuestas

Respuesta
1
'abre el block de notas de Windows, copia y pega este codigo
'cambia la ruta por el folder donde se encuentran los archivos que deseas renombrar
'guarda el archivo en tu escritorio como renombra.vbs y ejecutalo
'al iniciar y terminar el proceso te enviara un mensaje
'Cambia por el folder donde se contienen los archivos tiene que terminar con \
objTargetFolder = "C:\archivosarenombrar\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objTargetFolder)
Set colFiles = objFolder.Files
msgbox("Iniciando proceso, folder a revisar: " & objTargetFolder)
For Each objFile in colFiles
    Whole_Name=objFile.Name
    File_Name = Left(Whole_Name, InStrRev(Whole_Name,".") - 1)
    Ext = Mid (Whole_Name, InStrRev(Whole_Name,".") + 1)
    cleanstring=strClean(File_Name)
    if cleanstring<>File_Name then
        newfile=cleanstring&"."&Ext
        objFSO.MoveFile objTargetFolder & Whole_Name, objTargetFolder & newfile
    end if
Next
msgbox("Proceso terminado")
Function strClean (strtoclean)
    Dim objRegExp, outputStr
    Set objRegExp = New Regexp 
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "((?![a-zA-Z0-9]).)+"
    outputStr = objRegExp.Replace(strtoclean, "-")
    objRegExp.Pattern = "\-+"
    outputStr = objRegExp.Replace(outputStr, "")
    strClean = outputStr
End Function

Estimado muchisimas gracias por tu tiempo,

te lo agradezco,

Coloque la carpeta en el escritorio para hacer una prueba y seguí los pasos que me dijiste:

Una vez que ejecute el vbs apareció lo siguiente:

y en la carpeta apareció lo siguiente 

No sé donde estuvo mi fallo,

Gracias..

El problema estaba en al renombrar durante el proceso se encontraron archivos que se llaman igual por eso marcarca el error... te envío una actualización, lo que hice fue algo simple, agregue la validación y si el archivo existe le pone al final un numero random del 100 al 1000

Espero te sirva

'abre el block de notas de Windows, copia y pega este codigo
'cambia la ruta por el folder donde se encuentran los archivos que deseas renombrar
'guarda el archivo en tu escritorio como renombra.vbs y ejecutalo
'al iniciar y terminar el proceso te enviara un mensaje
'Cambia por el folder donde se contienen los archivos tiene que terminar con \
objTargetFolder = "C:\users\jeremias\Desktop\PRESUPUESTOS 2015\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objTargetFolder)
Set colFiles = objFolder.Files
msgbox("Iniciando proceso, folder a revisar: " & objTargetFolder)
For Each objFile in colFiles
    Whole_Name=objFile.Name
    File_Name = Left(Whole_Name, InStrRev(Whole_Name,".") - 1)
    Ext = Mid (Whole_Name, InStrRev(Whole_Name,".") + 1)
    cleanstring=strClean(File_Name)
    if cleanstring<>File_Name then
        newfile=cleanstring&"."&Ext
        If objFSO.FileExists(objTargetFolder & newfile) Then
            Dim max,min
            max=1000
            min=100
            Randomize    
           newfile=cleanstring&Int((max-min+1)*Rnd+min)&"."&Ext
        End If        
        objFSO.MoveFile objTargetFolder & Whole_Name, objTargetFolder & newfile
    end if
Next
msgbox("Proceso terminado")
Function strClean (strtoclean)
    Dim objRegExp, outputStr
    Set objRegExp = New Regexp 
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "((?![a-zA-Z0-9]).)+"
    outputStr = objRegExp.Replace(strtoclean, "-")
    objRegExp.Pattern = "\-+"
    outputStr = objRegExp.Replace(outputStr, "")
    strClean = outputStr
End Function
Respuesta
1

Tenía pensado intentar hacer lo que quieres mediante un BAT pero me surgen algunas dudas:

1- La tabla de conversión. ¿Es uno a uno? Es decir cada carácter se sustituye por uno solo. Por ejemplo:

á -> a
é -> e
...
Á -> A
É -> E
...
ü -> u
Ü -> U
...
ñ -> n
Ñ -> N
Otros símbolos como ¿¡

2- ¿Puede ocurrir que el nuevo nombre ya exista? Por ejemplo que haya que convertir el nombre de un archivo "Pequeño.doc" y que ya exista "Pequeno.doc"

3- ¿Hay que respetar las mayúsculas/minúsculas? Esto puede suponer una complicación para un BAT.

4- En el pantallazo del directorio se ven cosas como "Hidráulico" e
"Hidráulico". En el primer caso parece clara la conversión. ¿Y en el segundo?

Por supuesto, esta opción solo si te interesa más que la de VB de leonel05, o si tienes curiosidad, o cualquier otra razón. Yo sí que tengo curiosidad.

He decidido ofrecer una solución en BAT que cumple con la tabla del punto 1, saca un mensaje de advertencia en el punto 2, respeta parcialmente las mayúsculas y minúsculas (siempre que no se den simultáneamente en el nombre de algún archivo) e ignora el punto 4. Sería este:

@echo off
cd "d:\Carpeta prueba"
for /f %%n in ('dir /b *.* ^| findstr [ ‚¡¢£¤]') do (call :min "%%n")
for /f %%n in ('dir /b *.* ^| findstr [µÖàé¥]') do (call :may "%%n")
goto fin
:min
set ant=%~1
set act=%ant: =a%
set act=%act:‚=e%
set act=%act:¡=i%
set act=%act:¢=o%
set act=%act:£=u%
set act=%act:¤=n%
if exist "%act%" echo Ya existe el archivo "%act%". No se renombra&goto :eof
ren "%ant%" "%act%"
goto :eof
:may
set ant=%~1
set act=%ant:µ=A%
set act=%act:=E%
set act=%act:Ö=I%
set act=%act:à=O%
set act=%act:é=U%
set act=%act:¥=N%
if exist "%act%" echo Ya existe el archivo "%act%". No se renombra&goto :eof
ren "%ant%" "%act%"
goto :eof
:Fin

Lógicamente habría que ajustar el segundo comando (comando CD) a tus necesidades.

Aunque aparentemente el editor de la página ha alterado algunos caracteres, tanto en los que figuran como parámetros de los dos FINDSTR como en alguno de los SET, he comprobado, copiando y pegando, que son correctos.

Estimado señor,

Le agradezco mucho su tiempo,

No sería problemas el tema de mayúsculas y minúsculas. Pero si sería ideal que las tuviera.

Los errores son los siguientes:

 Línea Mermeladas - Línea Mermeladas

Recuperación Agua Lavadoras - Recuperación Agua Lavadoras

Tamañadora - Tamañadora

Túnel Pasteurizador- Túnel Pasteurizador

Termofísico de Papas-  Termofísico de Papas

Asesoría a planta Ecuador - AsesorÃ-­a Planta Ecuador

Hidráulico Horno- Hidráulico Horno

Como hago para ejecutar el BAT??

Desde ya sumamente agradecido por tu tiempo 

Saludos . 

Jero.

Creo que intentas darme las pautas de lo que yo llamé "tabla de conversión", pero no acaba de encajarme con lo que decías inicialmente.

Si en el nombre de algún archivo figura una "í" (cómo en "Línea Mermeladas") ¿Quieres que se cambie por "i" o por "Ã". Y lo mismo en los otros casos.

Respecto a como debes hacer para ejecutar un BAT ya te lo explica leonel05, en el comentario (copio la parte donde lo dice, con algún retoque):

Para ejecutar el archivo .bat, copia y pega el código enviado por gggirald en un archivo de bloc de notas, cambias el folder en la segunda línea, por el folder donde se contienen los archivos cd "d:\Carpeta prueba" y al guardar lo haces con extensión .BAT o .CMD, también puede ser en el escritorio...

Lo que dice leonel05 respecto a la necesidad de que el nombre de la carpeta/folder no tenga espacios no es del todo cierto. En general en el MSDOS actual si se permite que tenga espacios (y en ese caso hay que incluir entre comillas el nombre o path completo), aunque en versiones más antiguas del MSDOS de Windows o de Windows Server no se permitía.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas