Archivo por lotes para reemplazar "." con "-"

Archivo por lotes para reemplazar "." con "-"

Necesito conservar las extensiones de archivo y debe funcionar en las subcarpetas.

Por ejemplo: "Archivo.nombre.ext" debería convertirse en "Archivo-nombre.ext"

Soy completamente ignorante con respecto al script de shell, así que sea detallado en su respuesta. No tengo idea de qué significan los modificadores ni siquiera de cómo especificar la ruta.

Respuesta1

De hecho, estoy completamente de acuerdo con la otra respuesta. Una utilidad de cambio de nombre masivo GUI seríaentoncesmucho más fácil de usar. Sin embargo, solo por diversión escribí el siguiente archivo por lotes que debería cambiar el nombre de forma recursiva de todos los archivos en el directorio actual. y subdirectorios. y reemplazar. con - (por ejemplo "Archivo largo. .nombre.ext" se convertirá "Largo -archivo- -nombre.ext"):

@echo off
setlocal enabledelayedexpansion
for /r %%f in (*.*) do (
    set fn=%%~nf

    REM Remove the echo from the following line to perform the actual renaming!
    if not [!fn!]==[] if not ["%%~nxf"]==["!fn:.=-!%%~xf"] echo ren "%%~f" "!fn:.=-!%%~xf"
)
pause

Ejecute el archivo por lotes una vez, luego, si el resultado parece satisfactorio, realice el cambio de nombre eliminando la palabra echo(segunda instancia, no de la primera línea) y vuelva a ejecutar el archivo.

Respuesta2

De alguna manera no entiendo por qué quieres molestarte con un archivo por lotes. ¿Por qué no optas por una de las miles de millones de herramientas de cambio de nombre de GUI como:

http://www.beroux.com/english/softwares/renameit/

Si ese en particular no te convence, mira este desfile:

http://www.techsupportalert.com/best-free-rename-utility.htm

Respuesta3

Aquí está mi versión final probada de un archivo por lotes que puede hacer lo que usted quiera. Funciona con archivos con y sin nombres de archivo o extensiones, sin embargo, archivos con nombres de archivo que contienen %o!causar problemas.

Utiliza expansión retrasada, por lo que debe ejecutarlo desde un símbolo del sistema con la expansión retrasada activada (simplemente ejecutarlo setlocal /enabledelayedexpansionno será suficiente porque eso solo lo alterna).si ya está habilitado; no tiene ningún efecto si no está habilitado cuando se ejecuta el símbolo del sistema).

Puede activar la expansión retrasada abriendo el símbolo del sistema con el /V:ONinterruptor, pero también puede hacerlo desde un símbolo del sistema existente como en el archivo por lotes a continuación.

@echo off

:: This batch file (prints the command to) rename files so that
:: any dots (.) are replaced with dashes (-)
::
:: Note, files with names containing percents (%) and exclamantions (!)
:: will intefere with command-prompt syntax and are not supported, but
:: can be worked around: https://stackoverflow.com/questions/5226793/

:: If this batch-file has no parameters...
if [%1]==[] (
    :: Open a new command-prompt with delayed-expansion enabled and call self
    cmd /v:on /c "%0" +
    :: Quit
    goto :eof
)

:: Recurse through all files in all subdirectories
for /r %%i in (*) do (

    rem (:: cannot be used for comments in a FOR loop)
    rem Check if it has an extension
    if [%%~xi]==[] (
        rem If it has an extension, preserve it
        set RENFN=%%~nxi
    ) else (
        rem Copy the path (and filename)
        set RENFN=%%~ni
        rem Check if it has a filename
        if not [%%~ni]==[] (
            rem If it has a filename, replace dots with dashes
            set RENFN=!RENFN:.=-!
        )
    )

    rem Rename original file
    ren "%%i" "!RENFN!%%~xi"

)

:: Exit spawned shell (no need to use setlocal to wipe out the envvar)
exit

:: Test output:
::
:: C:\t> dir /b/a
::
:: .txt
:: blah
:: file.blah.txt
:: foo.bar.txt
:: super duper. .blah.ttt. omergerd.---.mp4
:: t.bat
::
:: C:\t> t.bat
::
:: ren "C:\t\.txt" ".txt"
:: ren "C:\t\blah" "blah"
:: ren "C:\t\file.blah.txt" "file-blah.txt"
:: ren "C:\t\foo.bar.txt" "foo-bar.txt"
:: ren "C:\t\super duper. .blah.ttt. omergerd.---.mp4" "super duper- -blah-ttt- omergerd----.mp4"
:: ren "C:\t\t.bat" "t.bat"

información relacionada