es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando escribir un script para cambiar el final de los nombres de archivo con una extensión .bat

Tengo un montón de archivos que necesito renombrar. Tienen una longitud variable. Así:

A1B2C3D4.en.fr.pdf
A1B2C3D4S8.it.fr.pdf
A1B2C3.de.fr.pdf
A1B2C3D4E5.zn.fr.pdf

Quiero cambiarlos para que pueda ejecutar un archivo .bat y hacer dos cambios:
1. agregarles a todos un prefijo estático, XYZ10;
2. reemplazar el final variable de “. * .fr.pdf” con “FRFR.pdf”
Entonces se verán así:

XYZ10A1B2C3D4FRFR.pdf
XYZ10A1B2C3D4S8FR.pdf
XYZ10A1B2C3FRFR.pdf
XYZ10A1B2C3D4E5FRFR.pdf

Lo he estado haciendo en pasos individuales cada vez con PowerShell, pero es una molestia seguir haciéndolo y a veces lo hace incorrectamente.

He intentado esto:

@echo off
ren *.??.fr.pdf *.FRFR.pdf

pero solo los hace verse así:

A1B2C3D4E5.zn.fr.FRFR.pdf

No sé por dónde empezar con el prefijo, no entiendo realmente ninguna de las cosas que he estado leyendo al respecto …

EDITAR:
Esto es lo que he estado haciendo para el prefijo en PowerShell.

Dir *.pdf | rename-item -newname {“XYZ10″+$_.Name}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cambiar el nombre de un conjunto de archivos con longitud variable mediante un archivo por lotes, puedes usar los siguientes comandos:

    @echo off
    setlocal enabledelayedexpansion
    set "StaticPrefix=XYZ10"
    for %%a in (*.fr.pdf) do (
       set "VariableEnd=%%~xa"
       set "NewName=!StaticPrefix!%%~naFRFR!VariableEnd!"
       ren "%%~a" "!NewName!"
    )
    

    Este archivo por lotes utiliza un bucle para renombrar cada archivo individualmente con el prefijo y sufijo deseados. Así es como funciona:

    • El comando setlocal enabledelayedexpansion se usa para habilitar la expansión retardada de variables en el bucle.
    • El comando set "StaticPrefix=XYZ10" establece una variable que contiene el prefijo estático que desea agregar a todos los archivos.
    • El comando for %%a in (*.fr.pdf) do ( inicia un bucle que iterará sobre todos los archivos en el directorio actual con la extensión “.fr.pdf”.
    • Dentro del bucle, el comando set "VariableEnd=%%~xa" extrae la extensión del archivo actual y la guarda en una variable.
    • El comando set "NewName=!StaticPrefix!%%~naFRFR!VariableEnd!" crea un nombre nuevo para el archivo concatenando el prefijo estático, el nombre del archivo (sin extensión), el sufijo deseado y la extensión del archivo.
    • Finalmente, el comando ren "%%~a" "!NewName!" renombra el archivo actual con el nuevo nombre.

    Con estos comandos, debería poder renombrar todos sus archivos de una vez, sin tener que usar PowerShell u otras herramientas.

Comments are closed.