Cambiar el nombre de varios archivos en una carpeta, añadir un prefijo (Windows)


Me gustaría cambiar el nombre de los archivos por lotes en una carpeta, prefijando el nombre de la carpeta en los nuevos nombres. es decir, los archivos en C:\house chores\ serán renombrados house chores - $old_name.

Author: ExillustX, 2014-01-02

6 answers

Opción 1: Usar Windows PowerShell

Abra el menú de Windows. Escriba: "PowerShell" y abra la ventana de comandos 'Windows PowerShell'.

Goto carpeta con los archivos deseados: por ejemplo, cd "C:\house tareas" Aviso: la dirección debe incorporar comillas "" si hay espacios involucrados.

Puede usar 'dir' para ver todos los archivos de la carpeta. Usando ' | 'canalizará la salida de' dir ' para el comando que sigue.

Notas: 'dir' es un alias de 'Get-ChildItem'. Ver: wiki: cmdlets . Uno puede proporcionar más funcionalidad. por ejemplo, 'dir-recurse' muestra todos los archivos, carpetas y subcarpetas.

¿Qué pasa si solo quiero un rango de archivos?

En lugar de 'dir |' puedo usar:

dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |

Para renombrar por lotes con el nombre del directorio como prefijo:

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

Opción 2: Usar el Símbolo del sistema

En la carpeta presione mayús + clic derecho: seleccione 'abrir comando-ventana aquí'

for %a in (*.*) do ren "%a" "prefix - %a"

Si hay muchos archivos, podría sería bueno agregar un comando' @echo off 'antes de esto y un comando' echo on ' al final.

 97
Author: ofer.sheffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 17:12:26

El problema con las dos respuestas de Powershell aquí es que el prefijo puede terminar duplicándose, ya que el script potencialmente se ejecutará sobre el archivo tanto antes como después de que se le haya cambiado el nombre, dependiendo del directorio al que se recurra a medida que se ejecute el proceso de cambio de nombre. Para evitar esto, simplemente use la opción -Exclude:

Get-ChildItem -Exclude house chores-* | rename-item -NewName { "house chores-" + $_.Name }

Esto evitará que el proceso cambie el nombre de un archivo más de una vez.

 21
Author: Dave.Gugg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 15:10:07

El Software libre 'Bulk Rename Utility' también funciona bien (y es poderoso para tareas avanzadas también). Descarga y la instalación toma un minuto.

Ver capturas de pantallay tutorial en el sitio web original.

--

No puedo proporcionar capturas de pantalla paso a paso, ya que las imágenes tendrán que publicarse bajo la Licencia Creative Commons, y no poseo las capturas de pantalla del software.

Descargo de responsabilidad: no estoy asociado con dicho software / empresa de cualquier manera. Me gustó el producto para mi propia tarea, sirve OP y requisitos similares, por lo tanto recomendando.

 12
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-15 14:01:03

Esto funcionó para mí, primero cd en el directorio al que le gustaría cambiar los nombres de archivo y luego ejecute el siguiente comando:

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
 11
Author: user3971138,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-27 10:32:05

Basado en @ofer.sheffer answer este comando renombrará en masa y añadirá la fecha actual al nombre del archivo. ie " archivo.txt "becomes" 20180329-file.txt " para todos los archivos de la carpeta actual

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"
 1
Author: karpa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 15:03:09

Sé que es una vieja pregunta, pero aprendí mucho de las diversas respuestas, pero se me ocurrió mi propia solución como una función. Esto debería agregar dinámicamente la carpeta padre como un prefijo a todos los archivos que coincidan con un cierto patrón, pero solo si no tiene ese prefijo ya.

function Add-DirectoryPrefix($pattern) {
    # To debug, replace the Rename-Item with Select-Object
    Get-ChildItem -Path .\* -Filter $pattern -Recurse | 
        Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | 
        Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
        # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}

Https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00

 0
Author: kmpm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 16:34:42