¿Existe una forma de renombrar por lotes los archivos a minúsculas?
Necesito una forma de renombrar todos los archivos de las carpetas y subcarpetas a minúsculas.
Me gustaría saber si hay una forma de hacerlo usando sólo windows (XP o 7)
Necesito una forma de renombrar todos los archivos de las carpetas y subcarpetas a minúsculas.
Me gustaría saber si hay una forma de hacerlo usando sólo windows (XP o 7)
Vaya al directorio y ejecute el siguiente comando:
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
Aquí está el desglose por si alguien quiere modificar/mejorar :
for /f
- Para cada línea "Tokens=*"
- Procesa cada elemento en cada línea. %f in (...)
- %f
es el nombre de su variable para cada elemento. dir
- Lista cada archivo y subdirectorio de un directorio. /l
- (parámetro para dir) Utiliza minúsculas. /b
- (parámetro para dir) Utiliza el formato desnudo, sólo los nombres de archivos/directorios, sin tamaño, sin cabeceras. /a-d
- (parámetro para dir) No **enumera directorios. (a
significa attribute
, -
significa not
y d
significa directory
)_. rename "%f" "%f"
- renombrar el archivo con su propio nombre, que en realidad está rebajado por la combinación de comando dir
y /l
.spacetornado Renamer es un programa para Windows que renombra cantidades masivas de archivos por lotes. Puede buscar y reemplazar texto, eliminar un determinado número de caracteres, cambiar las mayúsculas, minúsculas o mayúsculas de la primera letra, y añadir texto al principio o al final (append/prepend) de cada nombre de archivo
Desde Windows 7 puedes usar PowerShell para esas tareas
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
Where {-Not $_.PSIsContainer} |
Aquí hay una solución de línea de comandos recursiva adecuada usando sólo comandos nativos de cmd.exe que realmente funciona. Creo que es la solución nativa más sencilla posible:
for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"
Si está dispuesto a ir más allá de los comandos nativos de cmd.exe, entonces otra opción es mi JREN.BAT utilidad de renombrado de expresiones regulares que soporta opciones para convertir los nombres a mayúsculas o minúsculas. Es un script puro (híbrido JScript/lote) que se ejecuta de forma nativa en cualquier máquina Windows a partir de XP, sin necesidad de archivos exe de terceros. La documentación completa está incorporada - se accede desde la línea de comandos a través de jren /?
, o jren /??
si desea una salida paginada.
Con JREN, la solución recursiva es tan simple como:
jren "^" "" /s /l
Mi utilidad favorita para renombrar archivos por lotes es Cylog’s WildRename . Entre otras muchas características, puede cambiar las mayúsculas y minúsculas de los nombres de los archivos. Lo mejor de WildRename es probablemente que soporta expresiones regulares.
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')
Obtiene una lista de las rutas absolutas de todos los directorios dentro del actual (incluyéndolo):
C:\Foo>
C:\Foo \TO. txt
C:\Foo\Bar \LOWER. txt
C:\Foo\BarBaz \CASE. txt
for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")
Obtiene una lista de todos los nombres de archivos (o nombres de archivos y directorios si se quita el interruptor /a-d
) dentro de cada una de las rutas absolutas encontradas por el primer bucle, y convierte el nombre de estos archivos a minúsculas.
C:\Foo\Nde.txt**
C:\Foo\Bar\Nde.txt**
C:\Foo\Bar\Baz\Nde.txt**
C:\Foo\Nde.txt. txt**
\N necesita dos bucles porque el segundo argumento de rename
debe ser un nombre de fichero y no una ruta absoluta (como la obtenida por el interruptor /s
).
El mejor programa para hacer esto en Windows es Bulk Rename Utility . Es una herramienta para hombres. Incluso puedes usar regex para renombrar archivos y/o carpetas. También tiene integración con el shell (por lo que puede ejecutar desde el explorador con un clic derecho) que es muy agradable. Hay versiones de 64 y 32 bits disponibles.
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower da una función simple que debería ser capaz de incluir y llamar desde un archivo por lotes.
Así que haga que el archivo por lotes itere sobre las carpetas/nombres de archivos, y llame a esta función para generar la versión en minúsculas del nombre.
Desde http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Usando sólo comandos estándar, he creado los scripts LwrCase.bat y LwrCase_Folder.bat, para renombrar un nombre de archivo a minúsculas, o renombrar todos los nombres de archivo de una carpeta a minúsculas.
Para renombrar un nombre de archivo a minúsculas, utilice:
[call] LwrCase FullyQualifiedFileName
Donde FullyQualifiedFileName es el nombre de archivo completamente calificado a renombrar.
Para renombrar todos los nombres de archivos de un directorio, utilice:
[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]
Donde FullyQualifiedDirectoryName es la ruta de la carpeta completamente calificada, y /S es un parámetro opcional que también renombrará los nombres de archivos en todas las subcarpetas.
NOTA: LwrCase.bat utiliza el parámetro /L del comando DIR, que devuelve los nombres en minúsculas.
LwrCase.bat contiene:
@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
Rename %1 "%%f"
)
endlocal
LwrCase_Folder.bat contiene:
@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
call LwrCase "%%f"
)
popd
endlocal
La respuesta aceptada ](https://superuser.com/q/65302/150988#412413) a esta pregunta, por loftysnake , funciona para el directorio actual pero no busca en las subcarpetas.   Sawny sugirió una simple modificación a la respuesta de loftysnake para hacerla recursiva, pero no funciona, porque, mientras que el comando rename
permite especificar una unidad y una ruta con nombre de archivo1 (el origen), nombre de archivo2 (el destino) debe ser sólo un nombre de archivo. Para citar el mensaje de ayuda (/?
),
… no puede especificar una nueva unidad o ruta para su archivo de destino.
Pero move
funciona donde rename
no lo hace, así que puede renombrar recursivamente los archivos a minúsculas con este comando:
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")
porque resulta que Move
puede hacer frente a las rutas de los directorios.
El comando anterior funciona cuando se escribe directamente en el Símbolo del sistema (CMD.EXE
). Si quiere hacer esto desde un archivo por lotes (.BAT
), debe duplicar los caracteres %
:
for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")
Y probablemente pueda omitir los paréntesis y el /y
y decir sólo do move …
.
Powershell
Navega hasta el dir y ejecuta:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
He comprobado que esto funciona. Se encuentra aquí: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx