Autoit StringRegExpReplace Hakkında? - Çözüldü

Programlama dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
anxious
Byte3
Byte3
Mesajlar: 106
Kayıt: 11 Mar 2015, 07:56

Autoit StringRegExpReplace Hakkında? - Çözüldü

Mesaj gönderen anxious »

Arkadaşlar hem dosya hem klasörlerin isimlerinde istemediğimiz karakterleri nasıl silebiliriz alt klasörlerde dahil olacak şekilde
Klasörlerden youtube kelimesini
Resim

Dosyalardan da youtube kelimesini silmek istiyorum
Resim

Kod: Tümünü seç

$Kaynak = @ScriptDir
$RegExpReplace = StringRegExpReplace($Kaynak, "youtube", "")
if eğer dosyalar ise Then
FileMove($kaynak,$RegExpReplace)
else klasörler ise
    DirMove($kaynak,$RegExpReplace)
	EndIf
	
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 215
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit StringRegExpReplace Hakkında?

Mesaj gönderen BlueLife »

@anxious

Önce klasör içeriğinin listesini alırsın. Sonra listede ilgili kelimeyi aratarak replace yapabilirsin. Bir örnek hazırladım kendine göre düzenlersin.
Bu arada replace yapılacak dosya isminde benzer dosya varsa veyahut ilgili dosya klasör bir işlem tarafından kullanılıyorsa yeniden adlandırma işlemi başarısız olacaktır.

Kod: Tümünü seç

#include <Array.au3>

Local $TargetFolder = "C:\Test\"
Local $FileList

;Dosya ve klasör listesini alalım
_Bl_FileList($TargetFolder,$FileList)
_ArrayDisplay($FileList) ;Listeyi görüntülemek için

Local $ReplaceStr

If IsArray($FileList) <> 0 Then
	;Geriden itibaren kontrol edelim
	For $I = $FileList[0][0] to 1 step -1
		$ReplaceStr = StringReplace($FileList[$I][1],"youtube",'')
		If $ReplaceStr <> $FileList[$I][1] And Stringlen($ReplaceStr) > 0 Then
			;MsgBox(64,"",$FileList[$I][0] & $FileList[$I][1] & @crlf & @crlf & $FileList[$I][0] & $ReplaceStr)
			If $FileList[$I][2] = 0 Then ;Dosya
				FileMove($FileList[$I][0] & $FileList[$I][1],$FileList[$I][0] & $ReplaceStr)
			Else ;Klasör
				DirMove($FileList[$I][0] & $FileList[$I][1],$FileList[$I][0] & $ReplaceStr)
			EndIf
		EndIf
	Next
EndIf

Func _Bl_FileList($sFolder, ByRef $Bl_FileList)
	If StringRight($sFolder, 1) <> "\" Then $sFolder &= "\"

	Local $Error, $extended, $Found_File
	Local $BL_Search = FileFindFirstFile($sFolder & "*")
	If $BL_Search <> -1 Then
		While 1
			$Found_File = FileFindNextFile($BL_Search)
			$Error = @error
			$extended = @extended
			If $Error Then ExitLoop

			If IsArray($Bl_FileList) = 0 Then Dim $Bl_FileList[100][3] = [[0,100]]
			$Bl_FileList[0][0] += 1
			If $Bl_FileList[0][0] >= $Bl_FileList[0][1] Then
				$Bl_FileList[0][1] += 100
				ReDim $Bl_FileList[$Bl_FileList[0][1]][3]
			EndIf

			$Bl_FileList[$Bl_FileList[0][0]][0] = $sFolder
			$Bl_FileList[$Bl_FileList[0][0]][1] = $Found_File
			$Bl_FileList[$Bl_FileList[0][0]][2] = $extended ; 0 = File, 1 = Folder

			If $extended = 1 Then ;Folder
				_Bl_FileList($sFolder & $Found_File, $Bl_FileList)
			EndIf
		WEnd
	EndIf
	FileClose($BL_Search)
EndFunc   ;==>_Get_Exe_From_Folder
anxious
Byte3
Byte3
Mesajlar: 106
Kayıt: 11 Mar 2015, 07:56

Re: Autoit StringRegExpReplace Hakkında?

Mesaj gönderen anxious »

Vaybe bukadar detaylı olacağı hiç aklıma gelmemişti gerçekten teşekkür ederim
Bir kaç soru sorabilirmiyim
Şu satır : If StringRight($sFolder, 1) <> "\" Then $sFolder &= "\"
ve şu satırların tam olarak anlamı nedir
If IsArray($Bl_FileList) = 0 Then Dim Buradaki --> [100][3] ve [[0,100]] --> $Bl_FileList[100][3] = [[0,100]]

Birde siz dizileri çekerken $FileList[$I][0] değişkenin yanıda birtane daha [0] sıfır ekliyorsunuz mesela burada birden fazla kullanmışsınız $Bl_FileList[$Bl_FileList[0][0]][0] = $sFolder
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 215
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit StringRegExpReplace Hakkında?

Mesaj gönderen BlueLife »

@anxious

If StringRight($sFolder, 1) <> "\" Then $sFolder &= "\"
Klasörün sonunda \ karakteri yoksa ekle anlamını taşıyor. Misal @ScriptDir ile alınan klasör konumunda bazen \ olabilir bazen olmayabilir. Buda kodlanan programda bazen hata çıkmasına neden olur.

If IsArray($Bl_FileList) = 0 Then Dim $Bl_FileList[100][3] = [[0,100]]
Değişken array degilse tanıtma manasında. Bir sırada birden fazla veri almak için Bu tip tanıtma yapılıyor. = den sonra ise tanıtma yaparken bazı tanımlamalar yapmak için. Biraz kurcalarsan anlarsın.

$Bl_FileList[$Bl_FileList[0][0]][0] = $sFolder
$Bl_FileList[0][0] deki rakamı yansıtıyoruz. Misal $Bl_FileList[0][0] değeri 1 ise yukarıdaki satırın analamı $Bl_FileList[1][0] = $sFolder şeklinde olacaktır.
Karışık görünse de aslında karışık değil. Tabi biraz kurcalamak üzerinde çalışıp anlamak lazım.

Kolay gelsin...
Cevapla