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.
Reemplazar parte del nombre de carpetas Topic is solved
Moderator: Flipeador
Re: Reemplazar parte del nombre de carpetas Topic is solved
Hola,
Para carpetas:
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.
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
}
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.
Re: Reemplazar parte del nombre de carpetas
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.
Re: Reemplazar parte del nombre de carpetas
Cambia la línea loop files, % Path . "\*", DR (R al final).
Re: Reemplazar parte del nombre de carpetas
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.
- 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.
Re: Reemplazar parte del nombre de carpetas
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.
Re: Reemplazar parte del nombre de carpetas
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.
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.
Re: Reemplazar parte del nombre de carpetas
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.
Re: Reemplazar parte del nombre de carpetas
Muchas gracias. Efectivamente, hay algunos archivos que tienen un solo punto, y al ejecutar el script reemplaza también el de la extensión.
Re: Reemplazar parte del nombre de carpetas
De hecho acabo de ver que hay algunos archivos que no tienen ningún punto, únicamente el de la extensión.
Re: Reemplazar parte del nombre de carpetas
Cambia name := StrReplace(name, ".", "·") por:
Code: Select all
SplitPath name,,, ext, name
name := StrReplace(name, ".", "·") . "." . ext
Re: Reemplazar parte del nombre de carpetas
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.
[Mod edit: [code][/code] tags added.]
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
Re: Reemplazar parte del nombre de carpetas
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.
Re: Reemplazar parte del nombre de carpetas
La verdad no tengo idea no estoy familiarizado con lo que intentas hacer. Tal vez esto te ayude de algo.
Re: Reemplazar parte del nombre de carpetas
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.
Who is online
Users browsing this forum: No registered users and 30 guests