Post by Flipeador » 30 Jul 2018, 09:09
Prueba este script (si TeraCopy no copia los archivos correctamente puedes intentar reemplazar
UTF-16 por
UTF-8 o
CP0).:
Code: Select all
LCtrl & 1:: ; tecla de acceso rápido LCTRL+1
SelText := GetSelectedText() ; recupera el texto/archivos seleccionado(s)
if (ErrorLevel) ; si ocurrió un error
Return
GetTempFileObj(FileName,,,,SelText) ; crea un archivo temporal con el contenido de «SelText»
MsgBox 1,, % FileName . "`n`n" . SelText ; muestra la ruta del archivo temporal y el texto recuperado
IfMsgBox Cancel
Return
; copia los archivos en la lista y elimina el archivo temporal
RunWait "C:\Program Files\TeraCopy\TeraCopy.exe" Copy "*%FileName%" "Y:\Pruebas AutoHotkeys\Destino 1" /OverwriteAll /Close
FileDelete % FileName
; crea el registro
Loop Parse, SelText, `n, `r
{
SplitPath % A_LoopField, FN
FileAppend % FN . "`r`n", log.txt
}
Return
; ========================================================================================
; FUNCIONES
; ========================================================================================
/*
Recupera el texto seleccionado mediante el uso del portapapeles.
Parámetros:
KeepInClip:
Si verdadero el contenido copiado se mantiene en el portapapeles. Si es falso el portapapeles se restaura a su contenido original; este es el valor por defecto.
Timeout:
El tiempo máximo a esperar a que el portapapeles contenga datos, en segundos. Por defecto espera 2 segundos.
Ejemplo:
F1:: MsgBox % GetSelectedText() . "`n`n" . ErrorLevel
*/
GetSelectedText(KeepInClip := FALSE, Timeout := 2)
{
local Content := "" ; almacena el texto seleccionado
, ClipSaved := ClipboardAll ; guarda una copia de todos los datos en el portapapeles
Clipboard := "" ; vacía el portapapeles
SendInput ^c ; envía CTRL+C (copiar)
ClipWait % Timeout ; espera «Timeout» segundos a que el portapapeles contenga datos de cualquier tipo
if ( !ErrorLevel ) ; si ClipWait tuvo éxito
Content := Clipboard ; guardamos el texto en «Content»
if ( ErrorLevel || !KeepInClip ) ; si ClipWait no tuvo éxito o «KeepInClip» es falso
Clipboard := ClipSaved
return Content
} ; https://github.com/flipeador/AutoHotkey/blob/master/Lib/sys/Clipboard.ahk
/*
Recupera un objeto de archivo temporal válido para escribir en él.
Parámetros:
FileName:
Recibe una cadena con la ruta al archivo.
DirName:
El directorio donde crear el nuevo archivo. Si es una cadena vacía, se utiliza A_Temp.
Prefix:
La cadena de prefijo. Esta cadena se añadirá al comienzo del nombre del archivo.
Unique:
Valor entero para ser utilizado en la creación del nombre de archivo temporal.
Si este valor es cero, la función intenta formar un nombre de archivo único usando la hora del sistema actual (A_Now).
Si el archivo ya existe, el número se incrementa en uno y las funcion prueba si este archivo ya existe. Esto continúa hasta que se encuentre un nombre de archivo único.
Content:
Especifica el contenido del archivo. Este parámetro puede ser un Array [puntero a los datos, tamaño de los datos].
Encoding:
Codificación con la que abrir el archivo. Por defecto es UTF-16.
Return:
Devuelve un objeto de archivo con permiso de escritura. El objeto devuelto no comparte ningún acceso (lectura, escritura, eliminación).
Ejemplo:
MsgBox % GetTempFileObj(FileName, A_Desktop,,, "Hola Mundo!") . FileName ; crea un archivo temporal en el escritorio
*/
GetTempFileObj(ByRef FileName := "", DirName := "", Prefix := "", Unique := 0, Content := "", Encoding := "UTF-16")
{
local FileObj := ""
DirName := DirName == "" ? A_Temp : DirName
Unique := Unique == 0 ? A_Now : Unique
loop
FileName := DirName . "\" . Prefix . Unique++ . ".TMP"
until ( !FileExist(FileName) && (FileObj := FileOpen(FileName,"w-rwd",Encoding)) )
if ( IsObject(Content) )
FileObj.Seek(0), FileObj.Length := 0, FileObj.RawWrite(Content[1], Content[2])
else if (Content != "")
FileObj.Write(Content)
return FileObj
} ; https://github.com/flipeador/AutoHotkey/blob/master/Lib/fs/GetTempFile.ahk
Para mover los archivos utiliza el comando
FileMove, tal cual lo has descrito. Para mover con TeraCopy solo hay que cambiar
Copy por
Move.
Prueba este script (si TeraCopy no copia los archivos correctamente puedes intentar reemplazar [c]UTF-16[/c] por [c]UTF-8[/c] o [c]CP0[/c]).:
[code=autohotkey file=Untitled.ahk]LCtrl & 1:: ; tecla de acceso rápido LCTRL+1
SelText := GetSelectedText() ; recupera el texto/archivos seleccionado(s)
if (ErrorLevel) ; si ocurrió un error
Return
GetTempFileObj(FileName,,,,SelText) ; crea un archivo temporal con el contenido de «SelText»
MsgBox 1,, % FileName . "`n`n" . SelText ; muestra la ruta del archivo temporal y el texto recuperado
IfMsgBox Cancel
Return
; copia los archivos en la lista y elimina el archivo temporal
RunWait "C:\Program Files\TeraCopy\TeraCopy.exe" Copy "*%FileName%" "Y:\Pruebas AutoHotkeys\Destino 1" /OverwriteAll /Close
FileDelete % FileName
; crea el registro
Loop Parse, SelText, `n, `r
{
SplitPath % A_LoopField, FN
FileAppend % FN . "`r`n", log.txt
}
Return
; ========================================================================================
; FUNCIONES
; ========================================================================================
/*
Recupera el texto seleccionado mediante el uso del portapapeles.
Parámetros:
KeepInClip:
Si verdadero el contenido copiado se mantiene en el portapapeles. Si es falso el portapapeles se restaura a su contenido original; este es el valor por defecto.
Timeout:
El tiempo máximo a esperar a que el portapapeles contenga datos, en segundos. Por defecto espera 2 segundos.
Ejemplo:
F1:: MsgBox % GetSelectedText() . "`n`n" . ErrorLevel
*/
GetSelectedText(KeepInClip := FALSE, Timeout := 2)
{
local Content := "" ; almacena el texto seleccionado
, ClipSaved := ClipboardAll ; guarda una copia de todos los datos en el portapapeles
Clipboard := "" ; vacía el portapapeles
SendInput ^c ; envía CTRL+C (copiar)
ClipWait % Timeout ; espera «Timeout» segundos a que el portapapeles contenga datos de cualquier tipo
if ( !ErrorLevel ) ; si ClipWait tuvo éxito
Content := Clipboard ; guardamos el texto en «Content»
if ( ErrorLevel || !KeepInClip ) ; si ClipWait no tuvo éxito o «KeepInClip» es falso
Clipboard := ClipSaved
return Content
} ; https://github.com/flipeador/AutoHotkey/blob/master/Lib/sys/Clipboard.ahk
/*
Recupera un objeto de archivo temporal válido para escribir en él.
Parámetros:
FileName:
Recibe una cadena con la ruta al archivo.
DirName:
El directorio donde crear el nuevo archivo. Si es una cadena vacía, se utiliza A_Temp.
Prefix:
La cadena de prefijo. Esta cadena se añadirá al comienzo del nombre del archivo.
Unique:
Valor entero para ser utilizado en la creación del nombre de archivo temporal.
Si este valor es cero, la función intenta formar un nombre de archivo único usando la hora del sistema actual (A_Now).
Si el archivo ya existe, el número se incrementa en uno y las funcion prueba si este archivo ya existe. Esto continúa hasta que se encuentre un nombre de archivo único.
Content:
Especifica el contenido del archivo. Este parámetro puede ser un Array [puntero a los datos, tamaño de los datos].
Encoding:
Codificación con la que abrir el archivo. Por defecto es UTF-16.
Return:
Devuelve un objeto de archivo con permiso de escritura. El objeto devuelto no comparte ningún acceso (lectura, escritura, eliminación).
Ejemplo:
MsgBox % GetTempFileObj(FileName, A_Desktop,,, "Hola Mundo!") . FileName ; crea un archivo temporal en el escritorio
*/
GetTempFileObj(ByRef FileName := "", DirName := "", Prefix := "", Unique := 0, Content := "", Encoding := "UTF-16")
{
local FileObj := ""
DirName := DirName == "" ? A_Temp : DirName
Unique := Unique == 0 ? A_Now : Unique
loop
FileName := DirName . "\" . Prefix . Unique++ . ".TMP"
until ( !FileExist(FileName) && (FileObj := FileOpen(FileName,"w-rwd",Encoding)) )
if ( IsObject(Content) )
FileObj.Seek(0), FileObj.Length := 0, FileObj.RawWrite(Content[1], Content[2])
else if (Content != "")
FileObj.Write(Content)
return FileObj
} ; https://github.com/flipeador/AutoHotkey/blob/master/Lib/fs/GetTempFile.ahk[/code]
Para mover los archivos utiliza el comando [url=https://autohotkey.com/docs/commands/FileMove.htm]FileMove[/url], tal cual lo has descrito. Para mover con TeraCopy solo hay que cambiar [c]Copy[/c] por [c]Move[/c].