1. sayfa (Toplam 1 sayfa)

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

Gönderilme zamanı: 23 Kas 2017, 06:24
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
	

Re: Autoit StringRegExpReplace Hakkında?

Gönderilme zamanı: 23 Kas 2017, 20:30
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

Re: Autoit StringRegExpReplace Hakkında?

Gönderilme zamanı: 23 Kas 2017, 23:58
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

Re: Autoit StringRegExpReplace Hakkında?

Gönderilme zamanı: 24 Kas 2017, 11:28
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...