Reemplazar parte del nombre de carpetas Topic is solved

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Reemplazar parte del nombre de carpetas

09 Dec 2020, 12:05

Hola a todos. Tengo una enorme cantidad de carpetas de las que quiero variar ligeramente el nombre, y hacerlo manualmente se me haría eterno. ¿Podríais por favor indicarme como poder hacer esto?:

En una determinada carpeta tengo varias subcarpetas con nombres parecidos a este: "N150.- 04.01.80", y querría cambiar el nombre de cada subcarpeta por el siguiente "N150 - 04·01·80". Como veis se trata de sustituir ".-" por " - " y "." por "·" (punto medio).

Lo que quiero hacer es que al pulsar Control + F12, cambie el nombre de las subcarpetas de la carpeta activa (debe ser la carpeta activa, no todas las carpetas), en la forma descrita en el párrafo anterior. He intentado combinar varios scripts que he ido encontrando en internet, pero me da error y no funciona en absoluto.

Saludos y gracias.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Reemplazar parte del nombre de carpetas  Topic is solved

12 Dec 2020, 09:28

Hola,
Para carpetas:

Code: Select all

^F12::
Path := ExplorerPath(WinActive("A"))
if !FileExist(Path)
    return
MsgBox 0x1131,, % "Se va a cambiar el nombre de las carpetas en:`n" . Path . "\*"
IfMsgBox Cancel
    return
loop files, % Path . "\*", D
{
    name := StrReplace(A_LoopFileName, ".-", " - ")
    name := StrReplace(name, ".", "·")
    FileMoveDir % A_LoopFilePath, % A_LoopFileDir . "\" name, R
}
return

ExplorerPath(hWnd)
{
    local
    for w in ComObjCreate("Shell.Application").Windows
        if (w.hwnd == hWnd)
        {
            Path := StrReplace(URLDecode(w.LocationURL), "file:///")
            Path := RegExReplace(Path, "[/*]", "\")
            return Trim(Path, "\")
        }
} ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=71645#p309890

URLDecode(url)
{
    local
    dec := "", T := 0
    if (InStr(url,"%u")) {  ; UTF-16.
        loop parse, % url
            dec .= A_LoopField == "%" ? Chr("0x" . SubStr(url,A_Index+2,(T:=5)-1)) : ( --T > -1 ? "" : A_LoopField )
    } else loop parse, % url
        dec .= A_LoopField == "%" ? Chr("0x" . SubStr(url,A_Index+1,T:=2)) : ( --T > -1 ? "" : A_LoopField )
    return dec
}
Para archivos:
https://www.autohotkey.com/boards/viewtopic.php?f=40&t=84219&p=370923#p370809
Ver aquí para evitar que al cambiar el nombre afecte a la extensión.
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

13 Dec 2020, 10:32

Perfecto, muchísimas gracias. Solo una cosa, cuando ejecuto el script en una carpeta que contiene subcarpetas, cambia perfectamente el nombre de todas las subcarpetas, pero si entro dentro de una de esas subcarpetas, y dentro tengo otras subcarpetas e intento ejecutar el script, no funciona. ¿Puede solucionarse? De nuevo muchísimas gracias.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Reemplazar parte del nombre de carpetas

13 Dec 2020, 11:26

Cambia la línea loop files, % Path . "\*", DR (R al final).
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

13 Dec 2020, 15:04

Gracias. Con eso lo que obtengo es que cambia el nombre de las subcarpetas y automáticamente sus subcarpetas, pero no es eso lo que me gustaría. Lo que quiero es que no sea tan automático, sino que los nombres de las sucesivas subcarpetas cambien según vaya ejecutando el script, quiero decir:

- Entro en una carpeta con sus subcarpetas, ejecuto el script, cambian los nombres de las subcarpetas que están en esa carpeta, las que estoy viendo, pero no sus respectivas subcarpetas.
- Entro en una de las subcarpetas de esas subcarpetas, ejecuto el script y cambian los nombres de esas subcarpetas de la subcarpeta, las que estoy viendo, pero solo al volver a ejecutar el script.

La razón de hacerlo así es controlar visualmente que es lo que estoy cambiando, y no cambiar todas las sucesivas subcarpetas automáticamente, por si al hacerlo así cambio algo que no quiero.

Saludos y muchas gracias.
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

14 Dec 2020, 08:13

Perfecto, va justamente como había pensado, muchísimas gracias. Eso sí, mi script muy lejos de parecerse en algo al tuyo . . . me queda mucho por aprender. De nuevo muchas gracias.
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

16 Dec 2020, 04:45

Hola de nuevo. El script va de lujo, y he encontrado de gran utilidad el primero que me indicaste añadiéndole la R a "loop files, % Path . "\*", D", pues cuando el árbol de carpetas es muy extenso, es más fácil ejecutar ese primer script que hacerlo carpeta por carpeta, aún a costa de no controlar visualmente lo que voy haciendo (pero parece que funciona perfectamente).

Me preguntaba si es posible hacer alguna modificación a ese primer script para que haga exactamente el mismo cambio, pero hacerlo a los nombres de los archivos en lugar de al nombre de las carpetas, lógicamente con cuidado de no cambiar el punto de la extensión del archivo.

Saludos y muchas gracias.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Reemplazar parte del nombre de carpetas

16 Dec 2020, 11:48

Reemplaza en el loop a D por F para archivos, y para evitar que cambie el punto que separa el nombre de la extensión debes cambiar el segundo StrReplace por StrReplace(name, ".", "·", 1) (agrega el último parámetro , 1 para que solo reemplace la primer coincidencia). Si hay archivos que no contengan dos . se va a tener que modificar el script, ya que si tiene por ejemplo más de 2 va a reemplazar solo el primero, y si tiene uno solo va a reemplazar el de la extensión.
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

16 Dec 2020, 14:40

Muchas gracias. Efectivamente, hay algunos archivos que tienen un solo punto, y al ejecutar el script reemplaza también el de la extensión.
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

16 Dec 2020, 14:56

De hecho acabo de ver que hay algunos archivos que no tienen ningún punto, únicamente el de la extensión.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Reemplazar parte del nombre de carpetas

16 Dec 2020, 19:20

Cambia name := StrReplace(name, ".", "·") por:

Code: Select all

SplitPath name,,, ext, name
name := StrReplace(name, ".", "·") . "." . ext
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

17 Dec 2020, 04:01

Perfecto, muchísimas gracias. He hecho los cambios sobre el primer script que pusiste, y parece que funciona perfectamente (lo copio abajo). De nuevo muchas gracias.

Code: Select all

^F12::
Path := ExplorerPath(WinActive("A"))
if !FileExist(Path)
    return
MsgBox 0x1131,, % "Se va a cambiar el nombre de los archivos en:`n" . Path . "\*"
IfMsgBox Cancel
    return
loop files, % Path . "\*", FR
{
    name := StrReplace(A_LoopFileName, ".- ", " - ")
    SplitPath name,,, ext, name
name := StrReplace(name, ".", "·") . "." . ext
    FileMoveDir % A_LoopFilePath, % A_LoopFileDir . "\" name, R
}
return

ExplorerPath(hWnd)
{
	for w in ComObjCreate("Shell.Application").Windows
        if (w.hwnd == hWnd)
        {
            Path := StrReplace(w.LocationURL, "file:///")
            Path := StrReplace(Path, "%20", A_Space)
            Path := RegExReplace(Path, "[/*]", "\")
            return Trim(Path, "\")
        }
} ; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=71645#p309890

Return
[Mod edit: [code][/code] tags added.]
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

17 Dec 2020, 10:02

Hola de nuevo. He intentado ejecutar ambos scripts en un NAS que tengo en red, pero ninguno de ellos funciona. ¿No es posible ejecutarlo carpetas y archivos que están en red? Saludos y gracias.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Reemplazar parte del nombre de carpetas

17 Dec 2020, 18:00

La verdad no tengo idea :lol: no estoy familiarizado con lo que intentas hacer. Tal vez esto te ayude de algo.

:wave:
cilniani
Posts: 39
Joined: 30 Oct 2020, 16:15

Re: Reemplazar parte del nombre de carpetas

18 Dec 2020, 03:09

Gracias. No, no es eso. Trato de ejecutar los script en una carpeta que está en un disco duro externo, un NAS Asustor, pero no funcionan ninguno de ellos. También he notado que tampoco funcionan los scripts, en el disco duro interno, cuando intento ejecutarlos en una carpeta que está bastante abajo en el árbol de carpetas, en esos casos tengo que subir algún nivel en el árbol de carpeta para que funcione el script. No es el mismo caso con el externo, porque no funcionan ni intentando ejecutarlos en el nivel más alto del árbol de carpetas. Muchas gracias de todas formas. Saludos.

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 13 guests