Página 1 de 1

Renombrar con otro nombre

Publicado: 29 May 2014, 21:03
por yasmany
Hola a todos, sucede que quiero hacer para que me renombre un archivo pero si existiera ya el archivo, el nombre sea otro aumentado un numero
Por ejemplo tengo una carpeta llamada [Carpeta Recuperada] y [Carpeta Varios] pero yo le quiero renombrar a [Carpeta Varios] como [Carpeta Recuperada] pero que se enumere que quede de la siguiente manera:
[Carpeta Recuperada]
[Carpeta Recuperada01]
y si quiero hacer lo mismo en otras carpetas tome un nuevo numero quedando asi:
[Carpeta Recuperada]
[Carpeta Recuperada01]
[Carpeta Recuperada02]
[Carpeta Recuperada03]
[Carpeta Recuperada04]

He intentado con Do Until pero no me funciona o estoy aplicando mal.
Alguna ayuda al respecto?
Como funcionaria para renombrar archivos?
Por ejemplo si quiero copiar un archivo .docx en donde ya existe otro con el mismo nombre. ¿como pudiera hacer para que se copie con un numero diferente?
Podrian Ayudarme con un buen ejemplo?
Gracias :smt024

Re: Renombrar con otro nombre

Publicado: 29 May 2014, 21:40
por Dany
Creo que hay una API o interface que hace eso. si son pocos archivos comprueba si existe el archivo.

Saludos

Re: Renombrar con otro nombre

Publicado: 30 May 2014, 03:49
por PDF
A ver si entendí...
Lo que quieres hacer es renombrar una carpeta cualquiera a "Carpeta Recuperada", y si ya existe una carpeta con ese nombre, se cambie el nombre a "Carpeta Recuperada1" y así sucesivamente, prueba esta función quizas debas corregir algo..

Código: Seleccionar todo

_RenameFolder("E:\Carpeta Varios","Carpeta Recuperada") ; Ejemplo llamada a la función_RenameFolder
Func _RenameFolder($sPath, $sNewName)
    Local $sDir, $sNr=1,$wName
    If StringRigth($sPath,1) ="\" then $sPath = StringTrimRigth($sPath,1)
    $sDir=StringLeft($sPath, StringInStr($sPath, "\", -1))
    $wName = $sDir & $sNewName
    While Not FileExists($wName)
        $wName = $sDir & $sNewName & $sNr
        $sNr += 1
    WEnd
    RunWait(@ComSpec&' /c REN '&$sPath&' '&$wName)
EndFunc ;==>_RenameFolder
Para renombrar los ficheros es cuestión de modificarlo un poco...

Saludos..

Re: Renombrar con otro nombre

Publicado: 30 May 2014, 15:46
por yasmany
Muchas gracias :smt026 , el día de ayer realice algo de code y si me funcionó, pero la secuencia va aumentando un numero mas al nombre pero bueno algo es algo.
Sucede que algunos virus crean una carpeta sin nombre, esta creación de carpeta sin nombre manualmente se hace con la combinación de ALT+0160 (crea un "espacio vacío" pero no se identifica como espacio, tiene una particularidad), bueno en si lo que quería hacer y ya lo realice en cierta forma era que una vez ejecutados los procesos de mi software y que identifique esta carpeta (que por cierto suelen estar los archivos personales,) le cambie de nombre a [Archivos Recuperados] y si ya existe este le aumente un numero.

No descarto tu ayuda y tu tiempo PDF, lo mio puede que sea muy rustico y estudiaré lo que hace tu code, que por cierto voy a necesitar implentar tu ayuda que me has brindado. Gracias :smt001

Código: Seleccionar todo

Local $unidad = "I:"
Local $name = "Archivos Recuperados"
Do
	If FileExists($unidad & "\" & $name) Then
		$name &= +1
		If FileExists($unidad & "\" & $name) Then
			$valor = StringRight($name, 1) + 1
			DirMove($unidad & "\ ", $unidad & "\" & "Archivos Recuperados" & $valor)
		Else
			DirMove($unidad & "\ ", $unidad & "\" & $name)
		EndIf
	Else
		DirMove($unidad & "\ ", $unidad & "\" & $name)
	EndIf
Until Not FileExists($unidad&"\ ")

Re: Renombrar con otro nombre

Publicado: 30 May 2014, 16:39
por PDF
No hay de que..., un consejo con respecto a tu codigo, creo que en este caso seria mejor utilizar While...WEnd, porque este bucle comprueba al inicio la veracidad de la expresión y en el caso verdadero ya no ejecuta el codigo que sigue, para evitar errores,... y no es necesario comprobar varias veces si existe la carpeta, basta con otro bucle, mira este codigo modificado :smt024

Código: Seleccionar todo

Local $unidad = "I:"
Local $name = "Archivos Recuperados"
Local $i=1
While Not FileExists($unidad & "\ ") 
      While  Not FileExists($unidad & "\" &$name)
            $name="Archivos Recuperados"&$i
            $i+=1
      Wend
      DirMove($unidad & "\ ",$unidad & "\" & $name)
WEnd 
Saludos!

Re: Renombrar con otro nombre

Publicado: 01 Jun 2014, 12:19
por BasicOs

Código: Seleccionar todo

Por ejemplo si quiero copiar un archivo .docx en donde ya existe otro con el mismo nombre. ¿como pudiera hacer para que se copie con un numero diferente?
Algunos consejos..
El ejemplo anterior te vale. Solo que usa Filemove() porque te devuelve valores como el éxito de la operación facilmente.
Usa el punto o el punto y la extensión para separar el nombre con StringinStr() , (hay alguna función que lo hace también).
Haces un bucle como tienes y vas desde el 001 en adelante, y al último le sumas uno para el siguiente. Mira las funciones FILExx..
Te publicaré en unos dias un ejemplo programa que hace algo del estilo:
Este programa lo hice para cuando aparecen ficheros escaneados automáticamente en una carpeta del pc, y aviso que ya está listo el escaneo de un documento, y el usuario les cambia el nombre para tener algo organizado... :smt023 :smt041
Salu22:)

Re: Renombrar con otro nombre

Publicado: 01 Jun 2014, 19:37
por yasmany
Gracias chicos! por su ayuda... ando en unas pruebas de funcionalidad, EL LUNES ESTOY DE VUELTA. :smt001
:smt024