Jump to content

Dosya Kopyalamak Hatam Nerede ?


beydere

Recommended Posts

Peki bende ozaman sorunun devamını getireyim :)

Kopyalanacak klasör ve alt klasörlerine attrib uygulatalım desek o dizine bunu uygulatacak komut nedir?

Sanırım arkadaş format sonrası yedekleri (belgeler- desktop - sık kullanılanlar "gibi") tek tıklamayla geri yükletmek istiyor.

Link to comment
Share on other sites

@Hemoroid

FileSetAttrib("C:\YEDEK","+R",1)

;Alt klasörlerle birlikte salt okunur yapar.

Detaylı bilgi için yardım dosyasındaki FileSetAttrib konusuna bak.

Yardım dosyasını hızlı kullanmak için;

Scitede kodun üzerine faren ile bir kez tıklat ve sonra F1 tuşuna bas.

Link to comment
Share on other sites

Soruda hiç bir şey yok bence uygulamada var.

FileSetAttrib("D:\autoit scriptleri\kaspersky\","-RS", 1)

FileCopy("D:\autoit scriptleri\kaspersky\*", "C:\kaspersky\", 9)

Ben bu kodları denedim mesela kendi bilgisayarım da çok güzel çalıştı.

Link to comment
Share on other sites

Bir ihtimal uygulamayı admin olarak çalıştırmanız işe yarayabilir.

Autoit kodlamanın başına #RequireAdmin ekleyip deneyin.

Ayrıca, aslında ilgili dizindeki dosyalar tek tek tespit edilip kopyalamak çözüm olabilir.

@Hemoroid

Aramıza hoş geldin. Autoit kapacaksın gibime geliyor :)

Başarılar...

Link to comment
Share on other sites

Hoşbulduk :)

Gereksiz bile olsa birçok kodla uğraşıyorum daha hızlı öğrenmek için.

Birde yukarıdaki kodla ilgili şöyle birşey mümkündür sanırım. TrayTip eklenmiş hali burada.

Global $Hedef = @UserProfileDir & "\YEDEK\"
Global $Kaynak = "D:\YEDEK\*"
FileSetAttrib ($Kaynak,"-RS",1)
FileCopy ($Kaynak,$Hedef,9)
If FileExists($Kaynak) Then
TrayTip("Dikkat", "Kopyalama işlemi yapılıyor", 5)
Sleep(3000)
TrayTip("", "", 5)
Else
TrayTip("Dikkat", "Kopyalanacak klasör bulunamadı", 5)
Sleep(3000)
TrayTip("", "", 5)
EndIf

Olayı biraz daha geliştirip hedef ve kaynak klasörlerin boyutlarını karşılaştırsak.

Boyutlar birbirini tuttuğunda bir TrayTip daha açtırıp ("Kopyalama Tamamlandı", "Kopyalanan Dosya Boyutu MB", 5) yazdırsak.

Böyle bir kod eklenebilir değilmi ?

Link to comment
Share on other sites

@Hemoroid

DirGetSize ile klasör boyutunu alıp karşılaştırma yapabilirsin...

If DirGetSize("Hedef klasör") = DirGetSize("Kopyalanan konum") Then ;iki klasörün boyutu eşit ise;
	;Kolarını yaz
Else; Deyilse
	;Kolarını yaz
EndIf

Link to comment
Share on other sites

Tam şöyle yapıyordum ki.. Gerisini kodlar açıklasın :)

Global $Hedef_mb = DirGetSize($Hedef)
Global $Kaynak_mb = DirGetSize($Kaynak)
if $Hedef_mb = $Kaynak_mb Then
TrayTip("Kopyalama Tamamlandı", "[b]BURAYA SIZE YAZDIRMAK İSTİYORUM[/b]", 5)
Sleep(3000)
TrayTip("", "", 5)
EndIf

Link to comment
Share on other sites

@Hemoroid

Güzel :) Konuya gelirsek artık son noktayı koyalım...

Gerekli kodlar...

#RequireAdmin

If _BL_DIR_COPY(@UserProfileDir,"D:\YEDEK\",1) Then
	MsgBox(64,"","Başarılı bir şekilde tüm dosyalar kopyalandı")
Else
	MsgBox(16,"","Doya kopyalama sırasında sorun oluştu!")
EndIf


Func _BL_DIR_COPY($SOURCE,$TARGET,$OVER_WRITE = 0)
	If StringRight($SOURCE,1) = "\" Then $SOURCE = StringTrimRight($SOURCE,1)
	If StringRight($TARGET,1) = "\" Then $TARGET = StringTrimRight($TARGET,1)
	If not FileExists($SOURCE) Then SetError(1,0,False)
	Local $BL_SEARCH = FileFindFirstFile($SOURCE & "\*.*"),$BL_FILE,$BL_COPY = True
	If $BL_SEARCH = -1 Then Return SetError(1,0,False)
	If not FileExists($TARGET) Then DirCreate($TARGET)
	While 1
		$BL_FILE = FileFindNextFile($BL_SEARCH)
		If @error Then ExitLoop
		If StringInStr(FileGetAttrib($SOURCE & "\" & $BL_FILE),"D") Then
			$BL_COPY = _BL_DIR_COPY($SOURCE & "\" & $BL_FILE,$TARGET & "\" & $BL_FILE,$OVER_WRITE)
		Else
			If $OVER_WRITE <> 0 And FileExists($TARGET & "\" & $BL_FILE) Then
				FileSetAttrib($TARGET & "\" & $BL_FILE,"-RS")
				If FileCopy($SOURCE & "\" & $BL_FILE,$TARGET & "\" & $BL_FILE,9) = 0 Then $BL_COPY = False
			Else
				If FileCopy($SOURCE & "\" & $BL_FILE,$TARGET & "\" & $BL_FILE) = 0 Then $BL_COPY = False
			EndIf

		EndIf
	WEnd
	FileClose($BL_SEARCH)
	Return $BL_COPY
EndFunc

Link to comment
Share on other sites

Bir noktada ben koyabilirmiyim :)

Kopyalama mesajlarını TrayTip olarak, Bitiş mesajınıda şöyle gösteren kod.

tamam.jpg

Global $Hedef_mb = DirGetSize(@UserProfileDir & "\YEDEK\",1)
Global $Kaynak_mb = DirGetSize("D:\YEDEK\*",1)
Global $Hedef = @UserProfileDir & "\YEDEK\"
Global $Kaynak = "D:\YEDEK\*"
FileSetAttrib ($Kaynak,"-RS",1)
FileCopy ($Kaynak,$Hedef,9)
If FileExists($Kaynak) Then
TrayTip("Dikkat", "Kopyalama işlemi yapılıyor", 5)
Sleep(3000)
TrayTip("", "", 5)
Else
TrayTip("Dikkat", "Kopyalanacak klasör bulunamadı", 5)
Sleep(3000)
TrayTip("", "", 5)
EndIf
If IsArray($Hedef_mb) Then
	Msgbox(0,"Kopyalama Tamamlandı","Kopyalanan KB : " & $Hedef_mb[0] & @LF _
    	& "Dosya:" & $Hedef_mb[1] & @LF & "Alt Klasör:" & $Hedef_mb[2] & @LF _
    	)
EndIf

Tek derdim Endİf in ardından kopyalamanın bitmesini bekleyecek bir kod. Uğraştım didindim olmadı. Fonksyon olayına girmek için çok gencim :)

Bu haliyle halledemezsem kafayı yerim :D

Link to comment
Share on other sites

@Blue_life hocam ve @hemoroid teşekkür ederim ;) bende bir kod bulmuştum yavaş yavaş onun üzerinde çalışıyordum yapmak için. Çünkü tek kod ile olacak bir olay değil bu. Ama teşekkür ederim kafamı çatlatmaktan kurtardınız :D

Link to comment
Share on other sites

Ozaman son bir kod daha vereyim bari. Yukarıdaki olayı çözdüm kendi çapımda :)

Öncelikle bu kodu copy.exe olarak compile edip bir kenarda tut.

	$Hedef = @UserProfileDir & "\YEDEK\"
	$Kaynak = "D:\YEDEK\*"
	$Kopyala = FileCopy($Kaynak,$Hedef,9)
FileSetAttrib ($Kaynak,"-RS",1)
RunWait($Kopyala)
	If FileExists($Kaynak) Then
			TrayTip("Dikkat", "Kopyalama işlemi yapılıyor", 5)
			Sleep(3000)
			TrayTip("", "", 5)
		Else
			TrayTip("Dikkat", "Kopyalanacak klasör bulunamadı", 5)
			Sleep(3000)
			TrayTip("", "", 5)
	EndIf

Sonra bu kodu compile etmeden önce au3 dosyasının yanına önceki copy.exe yi koyup sonra compile et. Copy.exe dosyasını yeni oluşturduğun exenin içine gömecek.

Bu kodla çıkarttığın exe tek başına işi hallediyor..

FileInstall("copy.exe",@TempDir & "\pe.exe") ;----önceki exeyi autoite gömdük temp'e çıkartıp adını pe olarak değiştirdik
RunWait(@TempDir & "\pe.exe") ;----çalıştırıp bekledik, copy exe çalışmayı durdurana kadar alt satıra geçmiyoruz
FileDelete(@TempDir & "\pe.exe") ;----tempte kalıntı bırakmıyoruz
	$Hedef_mb = DirGetSize(@UserProfileDir & "\YEDEK\",1) ;----hedefteki dosyamızın boyutunu öğreniyoruz
;-- Bitiş mesajı
	If IsArray($Hedef_mb) Then
	Msgbox(0,"Kopyalama Tamamlandı", "Kopyalanan dosya boyutu : " & $Hedef_mb[0] & @LF _
    	& "Dosya:" & $Hedef_mb[1] & @LF & "Alt Klasör:" & $Hedef_mb[2] & @LF _
    	)
	EndIf

Uyarı mesajını üstte verdiğim gibi detaylı veriyor ve sorunsuz çalışıyor

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...