Agregue texto al final del nombre de archivo (pero antes de la extensión) usando un archivo por lotes

18

Tengo una lista de archivos que están en el formato de la izquierda. Quiero agregar una cadena a cada nombre de archivo, pero antes de la extensión, como se muestra:

File 1.txt  ->  File 1 version 1.txt
File 2.txt  ->  File 2 version 1.txt
File 3.txt  ->  File 3 version 1.txt
File 4.txt  ->  File 4 version 1.txt
...

En cada caso, la cadena adjunta es la misma en todos los archivos.

Esto parece una tarea tan simple, pero tengo algunos problemas para poner esto en un archivo por lotes.

Intenté el rencomando y seguí algunos de los ejemplos en esta página , pero los nombres de archivo resultantes agregan la cadena después de la extensión:

File 1.txt version 1.txt
El pavo
fuente
La información en su enlace SS64 "esta página" proviene de este SU Q&A (con mi bendición): ¿Cómo interpreta el comando RENAME de Windows los comodines? Mantengo la respuesta SU (con poca frecuencia) a medida que descubro nuevas características.
dbenham

Respuestas:

6

para nombres de archivo más largos, tendrá que agregar un poco más ?en el bloque con la masa de?????????

ren *.?* ????????????????????????????????????????????????????????" version 1".*
bummi
fuente
2
¡Gracias por responder tan pronto! Edité el comando ligeramente, para conservar la extensión del archivo y solo afectar los archivos txt: ren * .txt ????????????????????????? "Versión 1.txt "
TheTurkey
¿Qué
pasa
cuántos ? se necesitan personajes?
Kaveesh Kanwal
39

En lugar de confiar en las peculiaridades indocumentadas de ren , ¿por qué no hacer esto de la manera adecuada?

for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"

Si desea usar esto en un archivo por lotes, recuerde duplicar cada signo%.

Karan
fuente
1
¡Excelente! Esta es una mejor respuesta cualquier día. +1
Fr0zenFyr
2

Quería agregar "_A" a varios archivos y así es como lo hice.

Primero eliminé la extensión, agregué el sufijo y luego cambié la extensión a original. Realmente funcionó para mí y mantuvo el código de lote simple, ya que no soy un gran programador.

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf
Avinash Arunagiri
fuente
2

Para las personas que no tienen experiencia con el comando (como yo), hay un par de softwares que facilitan mucho el cambio de nombre:

  • Utilidad de cambio de nombre masivo (sin código abierto)
  • Renombrarlo! (fuente abierta)
MagTun
fuente
1

La solución de @ bwDraco fue buena, pero podría haberse mantenido más simple. Mi conjunto de archivos eran todos * .jpg y quería cambiarles el nombre a todos * c.jpg. Solo necesita 2 pasos para esto, no 3:

ren "{filepath}\*.jpg" *.
ren "{filepath}\*" *c.jpg
Zap Coffey-Brittain
fuente
0

Recurrentemente a través de subcarpetas

#!/bin/bash
# Warning: globstar excludes hidden directories.
# Turn on recursive globbing (in this script) or exit if the option is not supported:
shopt -s globstar || exit
for f in **
do
if [ -f "$f" ]; then
   extn=${f##*.} # save the extension of the file
   #mv "$f" "${f%.*}"_suffix.${extn};
   mv "$f" "${f%.*} version 1".${extn};
fi
done
Ferroao
fuente