¿Cómo puedo escribir un lote o un archivo cmd que va a cambiar el nombre de todos los archivos en un directorio? Estoy usando Windows.

Cambiar esta:

750_MOT_Forgiving_120x90.jpg
751_MOT_Persecution_1_120x90.jpg
752_MOT_Persecution_2_120x90.jpg
753_MOT_Hatred_120x90.jpg
754_MOT_Suffering_120x90.jpg
755_MOT_Freedom_of_Religion_120x90.jpg
756_MOT_Layla_Testimony_1_120x90.jpg
757_MOT_Layla_Testimony_2_120x90.jpg

A este:

750_MOT_Forgiving_67x100.jpg
751_MOT_Persecution_1_67x100.jpg
752_MOT_Persecution_2_67x100.jpg
753_MOT_Hatred_67x100.jpg
754_MOT_Suffering_67x100.jpg
755_MOT_Freedom_of_Religion_67x100.jpg
756_MOT_Layla_Testimony_1_67x100.jpg
757_MOT_Layla_Testimony_2_67x100.jpg
de windows y lo que se ejecuta en una .bat o .archivo cmd?
Amigo, si usted quiere ayudar a que usted no puede esperar que todo el mundo se psíquico.

OriginalEl autor Blainer | 2012-02-21

2 Comentarios

  1. 24

    Una instrucción for PARA recorrer los nombres (FOR /? para ayudar), y la cadena de búsqueda y reemplazo (tipo SET /? de ayuda).

    @echo off
    setlocal enableDelayedExpansion
    for %%F in (*120x90.jpg) do (
      set "name=%%F"
      ren "!name!" "!name:120x90=67x100!"
    )
    

    ACTUALIZACIÓN – 2012-11-07

    He investigado cómo el comando RENAME ofertas con comodines: ¿Cómo funciona el Windows cambiar el nombre de comando interpretar los comodines?

    Resulta que este problema puede ser fácilmente resuelto mediante el comando cambiar nombre, sin necesidad de una secuencia de comandos por lotes.

    ren *_120x90.jpg *_67x100.*
    

    El número de caracteres después de la _ no importa. El cambio de nombre todavía funciona correctamente si 120x90 se convirtió en x o xxxxxxxxxx. El aspecto importante de este problema es que todo el texto entre la última _ y la . es reemplazado.

    No estoy seguro de si este es un ejemplo completo. Pero Este funcionó para mí como un encanto 🙂
    He añadido una solución mucho más sencilla usando el comando REN. El enlace en tu comentario es básicamente el mismo que el de mi respuesta original.
    Se puede dividir su dos respuestas? Me gustaría dejar el ren one-liner en este, es el mejor!

    OriginalEl autor dbenham

  2. 8

    Como de Windows 7 usted puede hacer esto en una línea de PowerShell.

    powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"
    

    Explicación

    powershell -C "..." inicia una sesión de PowerShell para ejecutar el comando entre comillas. Devuelve a la carcasa exterior cuando se complete el comando. -C es corto para -Command.

    gci devuelve todos los archivos en el directorio actual. Se trata de un alias para Get-ChildItem.

    | % {...} hace una tubería para el proceso de cada archivo. % es un alias para Foreach-Object.

    $_.Name es el nombre del archivo actual en la tubería.

    ($_.Name -replace '120x90', '67x100') utiliza el -reemplace operador para crear el nuevo nombre de archivo. Cada aparición de la primera subcadena es reemplazado con el segundo de la subcadena.

    rni cambia el nombre de cada archivo. El primer parámetro (llamado -Path) identifica el archivo. El segundo parámetro (llamado -NewName) especifica el nuevo nombre. rni es un alias para Cambiar El Nombre Del Elemento De.

    Ejemplo

    $ dir
     Volume in drive C has no label.
     Volume Serial Number is A817-E7CA
    
     Directory of C:\fakedir\test
    
    11/09/2013  16:57    <DIR>          .
    11/09/2013  16:57    <DIR>          ..
    11/09/2013  16:56                 0 750_MOT_Forgiving_120x90.jpg
    11/09/2013  16:57                 0 751_MOT_Persecution_1_120x90.jpg
    11/09/2013  16:57                 0 752_MOT_Persecution_2_120x90.jpg
                   3 File(s)              0 bytes
                   2 Dir(s)  243,816,271,872 bytes free
    
    $ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"
    
    $ dir
     Volume in drive C has no label.
     Volume Serial Number is A817-E7CA
    
     Directory of C:\fakedir\test
    
    11/09/2013  16:57    <DIR>          .
    11/09/2013  16:57    <DIR>          ..
    11/09/2013  16:56                 0 750_MOT_Forgiving_67x100.jpg
    11/09/2013  16:57                 0 751_MOT_Persecution_1_67x100.jpg
    11/09/2013  16:57                 0 752_MOT_Persecution_2_67x100.jpg
                   3 File(s)              0 bytes
                   2 Dir(s)  243,816,271,872 bytes free
    
    ¿qué valor debe la marca de tiempo?
    Lo he descubierto por liarte con los RobbCopy guión y la creación de una función goto dentro del archivo bat.. gracias yo no estoy familiarizado con powershell como mucho, pero si tuviera que tienen un valor de marca de tiempo sería yyyymmddss con una máscara que lo han _1 _2 _3 etc... dependiendo del número de archivos.. yo era capaz de hacer esto en un archivo de proceso por lotes con robocopy..

    OriginalEl autor Iain Samuel McLean Elder

Dejar respuesta

Please enter your comment!
Please enter your name here