Necesito una forma de cambiar el nombre de todos los archivos en carpetas y subcarpetas a minúsculas.
Me gustaría saber si hay una manera de hacerlo usando solo Windows (XP o 7)
Necesito una forma de cambiar el nombre de todos los archivos en carpetas y subcarpetas a minúsculas.
Me gustaría saber si hay una manera de hacerlo usando solo Windows (XP o 7)
Respuestas:
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 en caso de que alguien quiera modificar / mejorar:
for /f
- Por cada línea"Tokens=*"
- Procesar cada elemento en cada línea.%f in (...)
- %f
es su nombre de variable para cada artículo.dir
- enumera cada archivo y subdirectorio en un directorio./l
- (parámetro para dir) Utiliza minúsculas./b
- (parámetro para dir) Utiliza formato simple, solo los nombres de archivo / directorio, sin tamaño, sin encabezados./a-d
- (parámetro para dir) No , no la lista de directorios . ( a
significa attribute
, -
representa not
y d
representa directory
) .rename "%f" "%f"
- cambie el nombre del archivo con su propio nombre, que en realidad está en minúscula por el dir
comando y la /l
combinación.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(agregada / r al directorio).
spacetornado Renamer es un programa de Windows que renombra cantidades masivas de archivos en lotes. Puede buscar y reemplazar texto, eliminar un cierto número de caracteres, cambiar el caso a minúscula, mayúscula o primera letra mayúscula y agregar texto al principio o al final (agregar / anteponer) de cada nombre de archivo
Desde Windows 7 puede usar PowerShell para esas tareas
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- Elija su carpeta raíz
- todos los archivos dentro de la carpeta raíz y las subcarpetas se renombran
- los nombres de las carpetas se excluyen con Where {-Not $_.PSIsContainer} |
Aquí hay una solución de línea de comandos recursiva adecuada que usa solo comandos cmd.exe nativos que realmente funcionan. Creo que es la solución nativa más simple 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 utilidad de cambio de nombre de expresiones regulares JREN.BAT que admite opciones para convertir nombres en mayúsculas o minúsculas. Es un script puro (JScript / lote híbrido) que se ejecuta de forma nativa en cualquier máquina Windows desde XP en adelante, no se necesitan archivos exe de terceros. La documentación completa está integrada: 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
/a-d
interruptor y también minúsculas los nombres de las carpetas también.
" D"') was unexpected at this time.
ejecutarlo como un comando directo funciona bien, simplemente no funciona cuando se ejecuta como un archivo por lotes. No estoy seguro de cómo hacer que funcione como un archivo por lotes, pero pensé que me daría cuenta del problema.
%D
lo tanto, debe cambiar a %%D
, y %F
a %%F
si coloca el comando dentro de un script por lotes.
Mi utilidad favorita personal para renombrar archivos por lotes es WildRename de Cylog . Entre muchas otras características, puede cambiar el caso de los nombres de archivo. ¡Lo mejor de WildRename es probablemente que admite 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 (incluido):
C: \ Foo>
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ 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 archivo (o nombres de archivo y directorio si retira el /a-d
interruptor) dentro de cada una de las rutas absolutas encontradas por el primer bucle , y convierte el nombre de estos archivos en minúsculas.
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
* necesita dos bucles porque el segundo argumento rename
debe ser un nombre de archivo y no una ruta absoluta (como la obtenida por el /s
conmutador).
cmd /c "echo %cd%&
en el primero for
? Es completamente innecesario.
echo %cd%
está ahí para agregar la carpeta actual a la lista de rutas absolutas ; y cmd /c
hace el &
trabajo para combinar comandos. Soy un novato total con respecto a Windows Batch Scripting ; Si conoce una mejor manera, ¡no dude en mejorar la respuesta!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower ofrece una función simple que debería poder incluir y llamar desde un archivo por lotes.
Por lo tanto, haga que el archivo por lotes repita las carpetas / nombres de archivo 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 solo comandos estándar, he escrito LwrCase.bat y LwrCase_Folder.bat, para renombrar un nombre de archivo en minúsculas, o renombrar todos los nombres de archivo en una carpeta en minúsculas.
Para cambiar el nombre de un archivo a minúsculas, use:
[call] LwrCase FullyQualifiedFileName
Donde FullyQualifiedFileName es el nombre de archivo completo que se va a renombrar.
Para cambiar el nombre de todos los nombres de archivos en un directorio, use:
[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]
donde FullyQualifiedDirectoryName es la ruta completa de la carpeta y / S es un parámetro opcional que también cambiará el nombre de los archivos en todas las subcarpetas.
NOTA: LwrCase.bat utiliza el modificador / L del comando DIR, que devuelve 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
El mejor programa para hacer esto en Windows es Bulk Rename Utility . Es una herramienta de hombre. Incluso puede usar expresiones regulares para cambiar el nombre de archivos y / o carpetas. También tiene integración de shell (por lo que puede ejecutar desde el explorador con un clic derecho) que es muy agradable. Versiones de 64 bits y 32 bits disponibles.
La respuesta aceptada a esta pregunta, por loftysnake , funciona para el directorio actual pero no busca subcarpetas.
Sawny sugirió una modificación simple a la respuesta de loftysnake
para que sea recursiva, pero no funciona, porque, si bien el rename
comando le permite especificar una unidad y ruta con el nombre de archivo1 (el origen), el nombre de archivo2 (el destino) debe ser solo 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 funciona, por lo que puede cambiar el nombre de los archivos de forma recursiva 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 directorio.
El comando anterior funciona cuando se escribe directamente en el símbolo del sistema ( CMD.EXE
). Si desea hacer esto desde un .BAT
archivo por lotes ( ), debe duplicar los %
caracteres:
for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")
Y probablemente puedas dejar los paréntesis y el /y
y decir simplemente do move …
.
move
funcionó donde rename
no funciona, y creo que soy el único que ha sugerido el uso del move
comando aquí. Simplemente tomé las sugerencias de @loftysnake y @sawny, y espero haberlas mejorado un poquito.
move
, pero no puedo encontrarlo ahora.
Potencia Shell
Navega hasta el directorio y ejecuta:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
He verificado que esto funciona. Encontrado aquí: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx