barbar0s Posted June 23, 2010 Share Posted June 23, 2010 Bilgisayardaki Sürücüleri bulup sırayla tarayarak C: D: E: vs. vs. içlerindeki mp3leri silecek bir script yapmaya calısıyorum Tek bir sürücüyü sildiriyorum ama sırayla yaptıramadım döngü ye aldığımda For $i = 1 To UBound($aResults)-1 'den sonra dongu basa dondugunde habire C: sürücüsünü tarayıp mp3leri siliyor C:'den sonra D: ye geçmesi lazım yardım edebilecek varmı kolay gelsin. Opt("TrayIconHide", 1) #include <GuiConstantsEx.au3> #include <ListViewConstants.au3> $var = DriveGetDrive( "FIXED" ) $sRequest = "\.mp3" $count = 0 Do $count = $count + 1 For $i = 1 to $var[0] $aResults = RecursiveFileSearch($var[$i], $sRequest, ".", 1) For $i = 1 To UBound($aResults)-1 If @error Then ExitLoop FileDelete($aResults[$i]) Next Next Until $count = $var[0] Func RecursiveFileSearch($RFSstartDir, $RFSFilepattern = ".", $RFSFolderpattern = ".", $RFSFlag = 0, $RFSrecurse = true, $RFSdepth = 0) ;Ensure starting folder has a trailing slash If StringRight($RFSstartDir, 1) <> "\" Then $RFSstartDir &= "\" If $RFSdepth = 0 Then ;Get count of all files in subfolders for initial array definition $RFSfilecount = DirGetSize($RFSstartDir, 1) ;File count + folder count (will be resized when the function returns) Global $RFSarray[$RFSfilecount[1] + $RFSfilecount[2] + 1] EndIf $RFSsearch = FileFindFirstFile($RFSstartDir & "*.*") If @error Then Return ;Search through all files and folders in directory While 1 $RFSnext = FileFindNextFile($RFSsearch) If @error Then ExitLoop ;If folder and recurse flag is set and regex matches If StringInStr(FileGetAttrib($RFSstartDir & $RFSnext), "D") Then If $RFSrecurse AND StringRegExp($RFSnext, $RFSFolderpattern, 0) Then RecursiveFileSearch($RFSstartDir & $RFSnext, $RFSFilepattern, $RFSFolderpattern, $RFSFlag, $RFSrecurse, $RFSdepth + 1) If $RFSFlag <> 1 Then ;Append folder name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf EndIf ElseIf StringRegExp($RFSnext, $RFSFilepattern, 0) AND $RFSFlag <> 2 Then ;Append file name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf WEnd FileClose($RFSsearch) If $RFSdepth = 0 Then Redim $RFSarray[$RFSarray[0] + 1] Return $RFSarray EndIf EndFunc;==>RecursiveFileSearch ;~ Func _GUICtrlSetData($iCtrlID, $sData) ;~ If GUICtrlRead($iCtrlID) <> $sData Then GUICtrlSetData($iCtrlID, $sData) ;~ EndFunc[/CODE] Link to comment Share on other sites More sharing options...
blackman12 Posted June 23, 2010 Share Posted June 23, 2010 Pek bişey değiştirmedim ama bi dene derim.Bir ara recursibefilesearch fonksiyonunu inceler ona göre kesin çözüm söylerim. Opt("TrayIconHide", 1) #include <GuiConstantsEx.au3> #include <ListViewConstants.au3> $var = DriveGetDrive( "FIXED" ) $sRequest = ".mp3" For $i = 1 to $var[0] $aResults = RecursiveFileSearch($var[$i]&"\", $sRequest, Default, 1) If @error Then ExitLoop For $a = 1 To $aResults[0] FileDelete($aResults[$a]) Next Next Func RecursiveFileSearch($RFSstartDir, $RFSFilepattern = ".", $RFSFolderpattern = ".", $RFSFlag = 0, $RFSrecurse = true, $RFSdepth = 0) ;Ensure starting folder has a trailing slash If StringRight($RFSstartDir, 1) <> "\" Then $RFSstartDir &= "\" If $RFSdepth = 0 Then ;Get count of all files in subfolders for initial array definition $RFSfilecount = DirGetSize($RFSstartDir, 1) ;File count + folder count (will be resized when the function returns) Global $RFSarray[$RFSfilecount[1] + $RFSfilecount[2] + 1] EndIf $RFSsearch = FileFindFirstFile($RFSstartDir & "*.*") If @error Then Return ;Search through all files and folders in directory While 1 $RFSnext = FileFindNextFile($RFSsearch) If @error Then ExitLoop ;If folder and recurse flag is set and regex matches If StringInStr(FileGetAttrib($RFSstartDir & $RFSnext), "D") Then If $RFSrecurse AND StringRegExp($RFSnext, $RFSFolderpattern, 0) Then RecursiveFileSearch($RFSstartDir & $RFSnext, $RFSFilepattern, $RFSFolderpattern, $RFSFlag, $RFSrecurse, $RFSdepth + 1) If $RFSFlag <> 1 Then ;Append folder name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf EndIf ElseIf StringRegExp($RFSnext, $RFSFilepattern, 0) AND $RFSFlag <> 2 Then ;Append file name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf WEnd FileClose($RFSsearch) If $RFSdepth = 0 Then Redim $RFSarray[$RFSarray[0] + 1] Return $RFSarray EndIf EndFunc;==>RecursiveFileSearch ;~ Func _GUICtrlSetData($iCtrlID, $sData) ;~ If GUICtrlRead($iCtrlID) <> $sData Then GUICtrlSetData($iCtrlID, $sData) ;~ EndFunc[/CODE] Link to comment Share on other sites More sharing options...
barbar0s Posted June 23, 2010 Author Share Posted June 23, 2010 çalışmadı dostum mp3 bile silmedi illa o func olmasına gerek yok amaç belli tarayacak bulacak silecek nette bunu buldum elinde baska func varsa onu verirsen onu deneyelim. Link to comment Share on other sites More sharing options...
barbar0s Posted June 23, 2010 Author Share Posted June 23, 2010 Çalıştı şu şekilde sayende bişi öğrenmiş oldum black ilk dongude $i demiştim ikicidede $i demiştim ondan hata veriyormus Bu Kod çalışıyor söyle bi ekleme yapabilirmiyiz script 10 dk bir kendi otomatik tarayacak hiç kapanmayacak yani program bide gizlenecek görev yoneticisinde gozukmuyecek ve usb den flash diski takdığı anda içinde mp3 varsa silecek kısacası bıktım su mp3 yüklemelerinden.. Opt("TrayIconHide", 1) #include <GuiConstantsEx.au3> #include <ListViewConstants.au3> $var = DriveGetDrive( "FIXED" ) $sRequest = "\.mp3" ; Daha Fazla Uzantı Sildirmek isterseniz \.(mp3|txt|Avi|Jpg) For $a = 1 to $var[0] MsgBox(4096,"Drive " & $a, $var[$a]) $aResults = RecursiveFileSearch($var[$a], $sRequest, ".", 1) For $i = 1 To UBound($aResults)-1 If @error Then ExitLoop FileDelete($aResults[$i]) Next Next Func RecursiveFileSearch($RFSstartDir, $RFSFilepattern = ".", $RFSFolderpattern = ".", $RFSFlag = 0, $RFSrecurse = true, $RFSdepth = 0) ;Ensure starting folder has a trailing slash If StringRight($RFSstartDir, 1) <> "\" Then $RFSstartDir &= "\" If $RFSdepth = 0 Then ;Get count of all files in subfolders for initial array definition $RFSfilecount = DirGetSize($RFSstartDir, 1) ;File count + folder count (will be resized when the function returns) Global $RFSarray[$RFSfilecount[1] + $RFSfilecount[2] + 1] EndIf $RFSsearch = FileFindFirstFile($RFSstartDir & "*.*") If @error Then Return ;Search through all files and folders in directory While 1 $RFSnext = FileFindNextFile($RFSsearch) If @error Then ExitLoop ;If folder and recurse flag is set and regex matches If StringInStr(FileGetAttrib($RFSstartDir & $RFSnext), "D") Then If $RFSrecurse AND StringRegExp($RFSnext, $RFSFolderpattern, 0) Then RecursiveFileSearch($RFSstartDir & $RFSnext, $RFSFilepattern, $RFSFolderpattern, $RFSFlag, $RFSrecurse, $RFSdepth + 1) If $RFSFlag <> 1 Then ;Append folder name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf EndIf ElseIf StringRegExp($RFSnext, $RFSFilepattern, 0) AND $RFSFlag <> 2 Then ;Append file name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf WEnd FileClose($RFSsearch) If $RFSdepth = 0 Then Redim $RFSarray[$RFSarray[0] + 1] Return $RFSarray EndIf EndFunc;==>RecursiveFileSearch Func _GUICtrlSetData($iCtrlID, $sData) If GUICtrlRead($iCtrlID) <> $sData Then GUICtrlSetData($iCtrlID, $sData) EndFunc[/CODE] Link to comment Share on other sites More sharing options...
blackman12 Posted June 23, 2010 Share Posted June 23, 2010 Benim verdiğimin çalışmama sebebi $sRequest = ".mp3" miş $sRequest = "\.mp3" yapınca tamamdır. Şimdi görev yöneticisinde görülmeme olayını anca svchost.exe gibi bir ad koyarsan olur.Eğer bu programı kötü bi amaç için falan kullanıyorsan yardım etmeyeceğimi belirtim şimdiden.USB'yi takınca silme olayını autorunla sen hallet.10 Dk'da bir çalıştırma olayını böyle yapabilirsin: Opt("TrayIconHide", 1) #include <GuiConstantsEx.au3> #include <ListViewConstants.au3> $min = @min _tarama() func _beklet() do sleep(1000) until @min = mod($min + 10,60) _tarama() enfunc func _tarama() $var = DriveGetDrive( "FIXED" ) $sRequest = ".mp3" For $i = 1 to $var[0] $aResults = RecursiveFileSearch($var[$i]&"\", $sRequest, Default, 1) If @error Then ExitLoop For $a = 1 To $aResults[0] FileDelete($aResults[$a]) Next Next _beklet() endfunc Func RecursiveFileSearch($RFSstartDir, $RFSFilepattern = ".", $RFSFolderpattern = ".", $RFSFlag = 0, $RFSrecurse = true, $RFSdepth = 0) ;Ensure starting folder has a trailing slash If StringRight($RFSstartDir, 1) <> "\" Then $RFSstartDir &= "\" If $RFSdepth = 0 Then ;Get count of all files in subfolders for initial array definition $RFSfilecount = DirGetSize($RFSstartDir, 1) ;File count + folder count (will be resized when the function returns) Global $RFSarray[$RFSfilecount[1] + $RFSfilecount[2] + 1] EndIf $RFSsearch = FileFindFirstFile($RFSstartDir & "*.*") If @error Then Return ;Search through all files and folders in directory While 1 $RFSnext = FileFindNextFile($RFSsearch) If @error Then ExitLoop ;If folder and recurse flag is set and regex matches If StringInStr(FileGetAttrib($RFSstartDir & $RFSnext), "D") Then If $RFSrecurse AND StringRegExp($RFSnext, $RFSFolderpattern, 0) Then RecursiveFileSearch($RFSstartDir & $RFSnext, $RFSFilepattern, $RFSFolderpattern, $RFSFlag, $RFSrecurse, $RFSdepth + 1) If $RFSFlag <> 1 Then ;Append folder name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf EndIf ElseIf StringRegExp($RFSnext, $RFSFilepattern, 0) AND $RFSFlag <> 2 Then ;Append file name to array $RFSarray[$RFSarray[0] + 1] = $RFSstartDir & $RFSnext $RFSarray[0] += 1 EndIf WEnd FileClose($RFSsearch) If $RFSdepth = 0 Then Redim $RFSarray[$RFSarray[0] + 1] Return $RFSarray EndIf EndFunc;==>RecursiveFileSearch[/CODE] Link to comment Share on other sites More sharing options...
barbar0s Posted June 30, 2010 Author Share Posted June 30, 2010 bide exe kapatıldımı tekrardan acılması için kod verebilirsen çok iyi olur dostum görev yoneticisinden kapatıldımı sonlardırdımı tekrardan calısacak. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.