cambiar el nombre de todos los archivos dentro de un directorio y sus subdirectorios con un script por lotes

cambiar el nombre de todos los archivos dentro de un directorio y sus subdirectorios con un script por lotes

Me gustaría cambiar el nombre y la extensión de todos los archivos que se encuentran en determinados directorios y sus subdirectorios a una combinación aleatoria de 25 signos alfamunéricos (letras y cifras) que es igual al nombre del archivo. La extensión del archivo debe ser ".TEST"

Encontré el siguiente script que solo cambia el nombre en un directorio principal y solo cambia el nombre a un número entero aleatorio.

@ echo off
setlocal EnableDelayedExpansion
for %%F in ("%userprofile%\music\*.*") do (
    ren "%%~F" "!RANDOM!.test"
)
endlocal

Entonces, ¿cómo hacerlo con todos los directorios secundarios y la combinación de letras y números?

Respuesta1

coloque /R después de la palabra forpara que recurra a subdirectorios

@ echo off
setlocal EnableDelayedExpansion
for /R "%userprofile%\music\" %%F in (*.*) do (
    ren "%%~fF" "%%~fF%RANDOM%.test"
)
endlocal

Vea más detalles sobre el bucle for recursivo aquí:https://ss64.com/nt/for_r.html

para la generación de números aleatorios, incluya el RANDOM entre signos % como %RANDOM%.https://riptutorial.com/archivo-batch/ejemplo/32511/números-aleatorios

Si desea poner un punto entre el nombre del archivo original y la nueva extensión, intente con ren "%%~fF" "%%~F.%RANDOM%.test". en mi sistema formatea nombres comoTextures\Interface\VUI+\solid_black.dds.230.test

para powershell haría algo como (esto es un ensayo; elimine -WhatIf de la línea cuando esté satisfecho de que funciona y desee ejecutar el cambio de nombre)

Get-ChildItem $env:USERPROFILE\music\ -Recurse -File | Rename-Item -WhatIf -NewName { $_.Name + "." + (Get-Random -Maximum 1000)+ ".test"}

información relacionada