Cambiar el nombre de varios archivos en cmd

Si tengo varios archivos en un directorio y deseo agregar algo a sus nombres de archivo, pero no a la extensión, ¿cómo podría hacerlo?

He intentado lo siguiente, con los archivos de prueba file1.txt y file2.txt :

 ren *.txt *1.1.txt 

Esto renombra los archivos a file1.1.txt y file2.txt1.1.txt

Quiero que los archivos sean file1 1.1.txt y file2 1.1.txt

¿Será esto posible desde cmd o necesito tener un archivo bat para hacer esto? ¿Qué hay de PowerShell?

 for /f "delims=" %%i in ('dir /b /ad *.txt') do ren "%%~i" "%%~ni 1.1%%~xi" 

Si usa el bucle for simple sin el parámetro /f , los archivos ya renombrados se renombrarán nuevamente.

Asegúrate de que haya más ? que hay personajes en el nombre más largo:

 ren *.txt "???????????????????????????? 1.1.txt" 

Consulte ¿Cómo interpreta el comando RENAME de Windows los comodines? para más información.

Nueva solución – 2014/12/01

Para aquellos a los que les gustan las expresiones regulares, existe JREN.BAT , una utilidad híbrida de línea de comandos JScript / por lotes que se ejecutará en cualquier versión de Windows desde XP hacia adelante.

 jren "^.*(?=\.)" "$& 1.1" /fm "*.txt" 

o

 jren "^(.*)(\.txt)$" "$1 1.1$2" /i 

Paso 1:

Seleccionar todos los archivos (ctrl + A)

Paso 2 :

A continuación, elija la opción de cambio de nombre

enter image description here

Paso 3:

Elige tu nombre de archivo … por ejemplo: miarchivo

cambia automáticamente el nombre a myfile (01), myfile (02) ,, …..

Si desea reemplazar espacios y corchetes, continúe con el paso 4

Etapa 4:

Abre Windows Powershell desde tu carpeta actual

enter image description here

Paso 5:

Para reemplazar el espacio vacío para subrayar (_)

  dir | rename-item -NewName {$_.name -replace [Regex]::Escape(" "),"_"} 

Paso 6:

Para reemplazar abrazadera abierta

  dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""} 

Para reemplazar cerrar el soporte

  dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""} 

El siguiente comando haría el trabajo.

 forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\"" 

fuente: cambiar el nombre de las extensiones de archivos a granel

 @echo off for %%f in (*.txt) do ( ren "%%~nf%%~xf" "%%~nf 1.1%%~xf" ) 

Pruebe esta herramienta de cambio de nombre masivo. Funciona bien. Tal vez no reinventar la rueda. Si no necesitas un script, esta es una buena forma de hacerlo.

Traté de pegar el comando de Endoro (Gracias Endoro) directamente en el símbolo del sistema para agregar un prefijo a los archivos, pero encontré un error. La solución era reducir %% a%, entonces:

 for /f "delims=" %i in ('dir /b /ad *.*') do ren "%~i" "Service.Enviro.%~ni%~xi" 

También me sorprendió esto … no me gustaron los paréntesis que Windows pone cuando cambias el nombre a granel. En mi investigación, decidí escribir un script con PowerShell en su lugar. Súper fácil y funcionó como un encanto. Ahora puedo usarlo cada vez que necesito procesar por lotes el cambio de nombre de archivo … que es frecuente. Tomo cientos de fotos y la cámara las nombra IMG1234.JPG, etc …

Aquí está el guión que escribí:

 # filename: bulk_file_rename.ps1 # by: subcan # PowerShell script to rename multiple files within a folder to a # name that increments without (#) # create counter $int = 1 # ask user for what they want $regex = Read-Host "Regex for files you are looking for? ex. IMG*.JPG " $file_name = Read-Host "What is new file name, without extension? ex. New Image " $extension = Read-Host "What extension do you want? ex. .JPG " # get a total count of the files that meet regex $total = Get-ChildItem -Filter $regex | measure # while loop to rename all files with new name while ($int -le $total.Count) { # diplay where in loop you are Write-Host "within while loop" $int # create variable for concatinated new name - # $int.ToString(000) ensures 3 digit number 001, 010, etc $new_name = $file_name + $int.ToString(000)+$extension # get the first occurance and rename Get-ChildItem -Filter $regex | select -First 1 | Rename-Item -NewName $new_name # display renamed file name Write-Host "Renamed to" $new_name # increment counter $int++ } 

Espero que esto sea útil para alguien allá afuera.

subcancer

Esto funciona para tu caso específico:

 ren file?.txt "file? 1.1.txt"