
¿Verdad que muchas veces has tenido que copiar varios nombres de archivos para preparar un presupuesto, por ejemplo? Aparte de copiar cada uno y pegarlo en tu plantilla de presupuesto, aquí veremos una forma rápida y sencilla de copiar todos los nombres de los archivos seleccionados.
¿Cómo?
Pues con AutoHotkey. ¡No podía ser de otra manera!
Planteamiento del problema
Tienes abierta una carpeta del Explorador con los documentos que el cliente te pide traducir, pero necesita antes tu presupuesto, por lo que deberías darle el listado de cada documento.
La forma tradicional, y que todos hemos hecho, es copiar uno a uno los nombres de los archivos:

y pegarlo en otra aplicación (en la imagen animada anterior, el Bloc de notas).
Si son pocos archivos, puedes continuar haciéndolo de la misma forma. No hay problema…
Pero si son muchos archivos o es una tarea que se repite a menudo, esta forma sería harto ingrata. ¡Tienes que hacerlo de otra manera!
Y la hay…
Te voy a recomendar el siguiente procedimiento que pasa por copiar los nombres de archivo con la ayuda de AutoHotkey, una herramienta de la que estoy enamorado (¿lo he dicho ya alguna vez?).
De esta nueva forma, el proceso es así de rápido y sencillo:
- seleccionar;
- pulsar una tecla.

Rápido, ¿verdad?
Te gustará saber que empleo esta macro cada día, sobre todo porque la encadeno con otras funciones que también pueden implementarse con AutoHotkey, como el recuento de palabras en Word.
¿Te interesa?
Pues sigue leyendo, porque, a continuación, veremos la macro de AutoHotkey necesaria.
⁂
Macro de AutoHotkey para copiar nombres de archivos
Primero te pongo la macro y luego la explicamos línea a línea, para que puedas personalizarla si así lo deseas.
; Copiar los nombres de archivos seleccionados
; https://www.gonduana.com/como-copiar-los-nombres-de-archivos-con-autohotkey
#IfWinActive ahk_exe explorer.exe
F12 up::
CopiarNombreArchivosExplorador()
return
CopiarNombreArchivosExplorador()
{
ControlGetFocus, miControl, A
If (miControl = "DirectUIHWND3")
{
clipboard =
SendInput, {Control Down}c{Control Up}
ClipWait, 0
Clipboard := RegExReplace(Clipboard, "m)^.+\\", "")
Sort, Clipboard
MsgBox, 64, Nombres de archivos, %Clipboard%
}
}
#IfWinActive
También te la puedes descargar:
Si lo único que querías era la macro, ya la tienes. Pero si quieres aprender a programa, sigue leyendo, porque la analizaremos paso a paso.
⁂
Análisis de la macro de AutoHotkey
En esta ocasión, vamos a enfocar la macro de AutoHotkey desde otro punto de vista al empleado hasta ahora en Gonduana, y es usando funciones.
☛ Si quieres profundizar en las funciones, lee este artículo de Gonduana: Teoría y práctica sobre las funciones en AutoHotkey.
¿Listo?
Pues empezamos.
Como lo que sigue es algo espeso, he dividido el análisis en secciones:
1. Solo para el Explorador de archivos
Después de las 2 primeras líneas para documentar el propósito de la macro, algo que te recomiendo siempre, tienes una directiva IfWinActive:
#IfWinActive ahk_exe explorer.exe
que hace que el código se ejecute solo cuando está activado el Explorador de archivos, que es lo que queremos.
☛ Esta linea 2 no es imprescindible, pero sí útil para encapsular un determinado código y tener la seguridad de que solo se ejecutará en una determinada aplicación (el Explorador de archivos en este caso).
2. Disparando la macro
En la línea 4 puedes ver que la macro se dispara con la tecla F12 . Ya sabes que puedes cambiarla a lo que te parezca mejor. Es más: Solo se dispara en el momento de liberar la tecla F12 , no al pulsarla, que es el comportamiento por defecto.
3. Llamando a una función
En la línea 5 se llama a una función, CopiarNombreArchivosExplorador, que está justo debajo.
La función CopiarNombreArchivosExplorador, como todas las funciones en AutoHotkey tiene un par de paréntesis (()), seguidos por un par de llaves ({}). En este caso, dentro de los paréntesis no hay nada, pero entre las llaves va siempre el código de la función, que vamos a ver ahora:
4. El control con foco
En la línea 10 se emplea la función ControlGetFocus para conocer el nombre del control que tiene el foco en el momento de ejecutar la macro. El nombre del control se guarda en la variable miControl.
☛ Esta línea tampoco es en verdad necesaria, pero verás su utilidad en los próximos artículos de Gonduana, cuando veamos que puedes pulsar la tecla F12 en varias zonas del Explorador de archivos para ejecutar acciones distintas.
En la línea 11 se comprueba si la variable miControl tiene el valor DirectUIHWND3. Te estarás preguntando por qué, ¿verdad?
Pues porque es el nombre del control del panel derecho del Explorador de archivos. Como podrás suponer, el panel izquierdo tiene otro nombre de control; la barra de direcciones también es otro control, así que tiene otro nombre…
¿Y cómo sé que ese es su nombre?, te preguntarás…
¡Muy buena pregunta!
Lo vemos en la siguiente sección:
5. La herramienta Window Spy
Puedes ejecutar la aplicación Window Spy si escribes Window Spy en el menú Inicio de Windows:

O si trabajas con SciTE4AutoHotkey para editar tus macros de AutoHotkey, pulsa el siguiente botón de la barra de herramientas para ejecutar Window Spy:

Si ejecutas Window Spy, verás algo parecido a esto:

¿Ves arriba en la parte central ClassNN: DirectUIHWND3? Pues ahí tienes el nombre del control que está debajo del cursor del ratón, en concreto el del panel derecho..
Si vas moviendo el ratón por la ventana del Explorador de archivos, verás que el nombre del control irá cambiando en tiempo real.
☛ Te recomiendo que pases un minuto moviendo el ratón por la ventana del Explorador de archivos; verás que el nombre del control irá cambiando en tiempo real y que el del panel izquierdo coincide con el que puse arriba..
¿Aclarado el nombre del control?
Pues seguimos con la macro…
6. Copiar los nombres de archivos
En la línea 13 vaciamos el contenido de la variable Clipboard, que es una variable especial de AutoHotkey cuyo valor siempre es el contenido del Portapapeles. Es fácil entender que haciendo esta variable igual a nada, el Portapapeles de Windows se vacía.
La pregunta del millón es: «¿Para qué hemos vaciado el Portapapeles?»
Lo entenderás fácilmente en un par de líneas. Paciencia, hermano…
En la línea 14 empleamos la función SendInput para ejecutar un CTRL+C , es decir, el copiar de toda la vida. Pero dentro del Explorador de archivos, este «copiar» tiene un significado especial. Atento ahora: No es que se copien los archivos seleccionados, como pasaría si pulsaras CTRL+C con el teclado, sino que se copian sus nombres.
☛ Por si te extraña: En esta línea 14 podríamos haber puesto SendInput ^c o Send ^c, simplemente, pero hemos dejado la forma recomendada en la documentación de AutoHotkey.
Podrías pensar que ya tenemos los nombres de los archivos y que podríamos dar por terminada la macro.
Pero no, mi querido lector: Aún nos falta algún punto importante.
En la línea 15 esperamos a que efectivamente el Portapapeles cambie de valor (función ClipWait). ¿Cómo saber que ha cambiado el Portapapeles? Si lo piensas bien, la única forma es vaciándolo previamente, cosa que hicimos en la línea 13. ¿Se entiende ahora?
El parámetro cero (0) de la función ClipWait indica que la macro de AutoHotkey esperará un máximo de 0,5 segundos a que cambie el Portapapeles. Tanto si ha cambiado de valor como si no, la macro continuará.
☛ Querido lector: En este punto deberías colocar algo de código para comprobar si el Portapapeles ha cambiado, porque si no ha cambiado, lo más elegante es indicar a AutoHotkey que salga de la función. Por mor de la simplicidad, he quitado este código de la macro en el artículo, pero tú deberías pensar algo al respecto, ¿de acuerdo?
Antes de seguir, paramos un momento para ver qué contiene el Portapapeles en la línea 15.
Si has seleccionado los siguientes elementos de una carpeta en tu Explorador de archivos:

el Portapapeles en la línea 15 tendrá este valor:
C:\proyecto 1\para traducir\documento 1.docx
C:\proyecto 1\para traducir\documento 2.docx
C:\proyecto 1\para traducir\documento 3.docx
C:\proyecto 1\para traducir\hoja de cálculo 1.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 2.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 3.xlsx
C:\proyecto 1\para traducir\presentación 1.pptx
C:\proyecto 1\para traducir\presentación 2.pptx
C:\proyecto 1\para traducir\presentación 3.pptx
6. Borrando la ruta con una expresión regular
Ahora ves que habría que procesar este contenido del Portapapeles, porque cada línea contiene no solo el nombre del archivo (lo que queremos), sino también la ruta completa (que tenemos que borrar, porque no la queremos).
La siguiente línea, la 16, emplea una función, RegExReplace, para justamente borrar la ruta que no queremos.
La función RegExReplace es algo complicada. Está muy bien explicada en la ayuda de AutoHotkey y también en este enlace. Por ello, solo voy a contar brevemente lo que hace. Esta función emplea una expresión regular, que quizás es un concepto novedoso, pero vamos a intentar comprender todo, ¿vale?
El primer argumento de la función RegExReplace es la cadena de entrada, que es Clipboard, es decir, el Portapapeles, que, recordamos, es:
C:\proyecto 1\para traducir\documento 1.docx
C:\proyecto 1\para traducir\documento 2.docx
C:\proyecto 1\para traducir\documento 3.docx
C:\proyecto 1\para traducir\hoja de cálculo 1.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 2.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 3.xlsx
C:\proyecto 1\para traducir\presentación 1.pptx
C:\proyecto 1\para traducir\presentación 2.pptx
C:\proyecto 1\para traducir\presentación 3.pptx
El segundo argumento de la función RegExReplace es una expresión regular:
m)^.+\
Esta expresión regular lo que hace es buscar en todas las líneas (m)) una cadena que empiece por cualquier cosa (^.+) seguida por una antibarra (\\). Como el carácter de la antibarra (\) es un carácter especial, hay que precederlo por otra antibarra en la expresión regular; por eso ves 2 antibarras seguidas. Créeme si te digo que esta expresión regular buscará una coincidencia en cada línea, desde el principio de la línea hasta la última antibarra de la misma línea.
Es decir, las coincidencias serán las siguientes, marcadas en azul:
C:\proyecto 1\para traducir\documento 1.docx
C:\proyecto 1\para traducir\documento 2.docx
C:\proyecto 1\para traducir\documento 3.docx
C:\proyecto 1\para traducir\hoja de cálculo 1.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 2.xlsx
C:\proyecto 1\para traducir\hoja de cálculo 3.xlsx
C:\proyecto 1\para traducir\presentación 1.pptx
C:\proyecto 1\para traducir\presentación 2.pptx
C:\proyecto 1\para traducir\presentación 3.pptx
El tercer argumento de la función RegExReplace es la cadena de sustitución, es decir, la cadena que va a sustituir a la coincidencia encontrada. Como es una cadena vacía, el efecto que producirá la función RegExReplace es borrar desde el principio hasta la última antibarra, incluida, y esto para cada línea que haya.
Terminamos con la función RegExReplace diciendo que devuelve un valor que guardamos de nuevo en la variable Clipboard.
☛ Si te sientes perdido con las expresiones regulares, puedes consultar los artículos de expresiones regulares de este blog de Gonduana.
7. Ordenando el Portapapeles
Fíjate que ahora el Portapapeles solo contiene nombres de archivos, sin la ruta. Ya casi estamos…
Bien, pues después de sobrevivir a la parte más difícil de la macro de AutoHotkey, pasamos a la línea 19, donde la función Sort ordena alfabéticamente las líneas del Portapapeles.
El motivo de esta línea 19 del código de AutoHotkey es que, dependiendo de cómo hayas seleccionado los archivos, así será el orden de las líneas del Portapapeles. Por tanto, estimo muy útil un último esfuerzo para dar al cliente un listado en orden alfabético, que es el más habitual en el Explorador de archivos.
En el Portapapeles tendrás este contenido:
documento 1.docx
documento 2.docx
documento 3.docx
hoja de cálculo 1.xlsx
hoja de cálculo 2.xlsx
hoja de cálculo 3.xlsx
presentación 1.pptx
presentación 2.pptx
presentación 3.pptx
Que era lo que queríamos desde el principio, ¿verdad?
7. Presentación en pantalla del Portapapeles
La línea 20 solo nos sirve de confirmación de que los nombres de los archivos seleccionados están copiados en el Portapapeles.
¡Macro terminada!
☛ Si has llegado hasta aquí y entiendes la macro al completo, mi más sincera enhorabuena. Te ayudará a comprender otras macros de AutoHotkey y no dudo de que te atreverás a modificarla para tus fines.
☛ Si no has entendido algo de la macro, te recomiendo que releas el artículo y que consultes la ayuda de AutoHotkey. Si bien es posible que para este artículo necesites profundizar en las expresiones regulares, también es cierto que es algo que puedes ir haciendo poco a poco. Todo se aprende poco a poco.
⁂
Conclusiones de la macro de AutoHotkey
Con esta macro de AutoHotkey, que te puedes descargar, podrás copiar los nombres de uno o varios archivos seleccionados en el Explorador de archivos.
Solo una tecla, F12 , y ya tienes todos los nombres de archivo, cientos si quieres, en el Portapapeles:

Estarás de acuerdo en que la macro es muy rápida y puede facilitarte mucho tu trabajo, ¿verdad?
Te lo digo por experiencia: La macro merece la pena si necesitas preparar presupuestos y facturas con listas de documentos, por ejemplo, para traducir.
La macro merece aún más la pena si aprovechas la tecla F12 para otras acciones dentro del Explorador de archivos, como veremos en el próximo artículo de Gonduana.
⁂
Nada más, solo un par de recomendaciones si te interesa leer más sobre AutoHotkey o si quieres estar al tanto de los artículos de Gonduana que continuarán a este:
- Lee los otros artículos de AutoHotkey de este mismo blog. Los tienes todos si filtras por «AutoHotkey» en la nube de etiquetas (columna derecha del blog).
- Suscríbete al boletín del blog, o sígueme en LinkedIn o Twitter (@jssprt). De esta manera, serás el primero en enterarte de la publicación de los artículos.







That is cool! Thank you!