Hallo,
Hat schon jemand den Script getestet ?
eine Antwort wäre echt nett... ![]()
auch Kritik ist willkommen...
Danke euch!
tv_freeze
Hallo,
Hat schon jemand den Script getestet ?
eine Antwort wäre echt nett... ![]()
auch Kritik ist willkommen...
Danke euch!
tv_freeze
Hallo, und Tach auch ! ![]()
Ich habe mal aus langeweile aus dieser Batch-Datei (ein Selbstmodifizierenden Windows-Starter) alles mit Autoit übersetzt.
starts=0
datum="18.05.2010"
backup=1
'Beispiel für einen selbstmodifizierenden Windows-Starter
'Die ersten drei Zeilen werden jeweils neu geschrieben
'Der Rest ist konstant
'Die nachfolgenden Programme und Pfadnamen dieses Scripts sind anzupassen
'Das angepasste Script ist in den Autostart-Ordner zu kopieren oder im Run-Schlüssel der Registry einzutragen
Set MyShell = Wscript.CreateObject("Wscript.Shell")
If datevalue(datum) <> date() then 'neuer Tag
starts = 0
backup=backup - 1
if backup=0 then
backup=6
x=MsgBox ("Soll die Festplatte Defragmentiert werden ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoDefrag.exe"),2,true
'Die Batch startet nur nach eine Woche.
end if
end if
End if 'neuer Tag - Ende
select case starts 'Windows wurde heute bereits gestartet
case 2 '3 mal
x=MsgBox ("Du hast schon 3mal den Rechner gestartet. Soll ich den CCleaner starten ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoCCleaner.exe"),2,true
end if
case 4 '5 mal
starts = 0
x=MsgBox ("Du hast schon 5mal den Rechner gestartet. Soll ich den CCleaner starten ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoCCleaner.exe"),2,true
end if
case else
End Select
MyScriptName = WScript.ScriptFullName
Set MyFiles = CreateObject("Scripting.FileSystemObject")
Set MyText = MyFiles.OpenTextFile(MyScriptName, 1)
MyText.SkipLine
MyText.Skipline
MyText.Skipline
MyRest=MyText.readall 'Lesen dieser Scriptdatei ohne die drei ersten Zeilen
MyText.Close
Set MyText = MyFiles.CreateTextFile(MyScriptName, True)
MyText.Write "starts=" & starts + 1 & chr(13) & chr(10)
MyText.Write "datum=" & chr(34) & date() &chr(34) & chr(13) & chr(10)
MyText.Write "backup=" & backup & chr(13) & chr(10)
'Schreiben der Anfangszeilen abgeschlossen
MyText.Write MyRest 'Schreiben des konstanten Rests
MyText.Close
Und das ist dabei rausgekommen....
$starts = 0
$tag = 1
$datum = "18.05.2010"
; Beispiel für einen selbstmodifizierenden Windows-Starter
; Die ersten drei Zeilen werden jeweils neu geschrieben
; Der Rest ist konstant
; Die nachfolgenden Programme und Pfadnamen dieses Scripts sind anzupassen
; Das angepasste Script ist in den Autostart-Ordner zu kopieren oder im Run-Schlüssel der Registry einzutragen
; Autoit muss Installiert sein und das Script darf nicht compiliert werden (Wichtig!)
; Programmiet mit: Autoit 3.3.6.1 by tv_freeze (www.Autoit.de)
Global $rest
$Check = _CheckDate($Datum)
If $Check = 2 Then ; neuer Tag
$starts = 0
$tag = $tag - 1
If $tag = 0 Then ; Woche um
$tag = 6
$msg=MsgBox(32+4,"Festplatte Defragmentieren ?", "Es wird empfohlen Ihre Festplatte zu Defragmentieren." _
& @CRLF & "Diese Frage bekommen Sie immer einmal die Woche gestellt...")
If $msg=6 Then
Run(@ComSpec & " /c " & 'C:\Programme\Defraggler\Defraggler.exe', "", @SW_HIDE)
While Not ProcessExists("Defraggler.exe")
Sleep(200)
WEnd
Sleep(200)
ControlClick("Piriform Defraggler", "", "[ID:1002]")
Sleep(200)
While Not WinExists("Piriform Defraggler", "Dateien...")
Sleep(200)
WEnd
Sleep(200)
ControlClick("Piriform Defraggler", "", "[ID:1005]")
EndIf
EndIf
EndIf
Select
Case $starts = 2 ; Schon 3 mal gestartet
Run(@ComSpec & " /c " & 'C:\Programme\Defraggler\Defraggler.exe', "", @SW_HIDE)
Case $starts = 4 ; schon 5 mal gestartet
$starts = 0
Run(@ComSpec & " /c " & 'C:\totalcmd\totalcmd.exe', "", @SW_HIDE)
EndSelect
$file = FileOpen(@ScriptFullPath, 0)
If $file = -1 Then
Exit
EndIf
; die ersten 3 Zeichen auslassen
$line1 = FileReadLine($file)
$line2 = FileReadLine($file)
$line3 = FileReadLine($file)
While 1
$rest = $rest & FileRead($file, 1)
If @error = -1 Then ExitLoop
Wend
FileClose($file)
$file = FileOpen(@TempDir & "\" & @ScriptName, 2)
FileWriteLine($file, "$starts = " & $starts + 1 & @CRLF)
FileWriteLine($file, "$tag = " & $tag & @CRLF)
FileWriteLine($file, "$datum = " & Chr(34) & @MDAY & "." & @MON & "." & @YEAR & Chr(34) & @CRLF)
FileWriteLine($file, $rest)
FileClose($file)
FileMove(@TempDir & "\" & @ScriptName, @ScriptFullPath, 1)
Exit
Func _CheckDate($sDate)
Local $sNow = @YEAR & @MON & @MDAY
$sDate = StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4})', '$3$2$1')
Select
Case $sDate > $sNow
$iReturn = 1
Case $sDate = $sNow
$iReturn = 0
Case $sDate < $sNow
$iReturn = 2
EndSelect
Return $iReturn
EndFunc
Alles anzeigen
Der Script ist noch erweiterbar und ausbaufähig.
Vielleicht kann jemannd es ja für irgendwas gebrauchen ???
Freundliche Grüße von
tv_freeze (https://autoit.de/www.autoit.de...
)
PS: Bitte ausprobieren und feedback hier posten (wenn's geht...)
Bezug von ganz Oben....
Ich möchte euch meinen verbesserten MP3-Sortierer hier vorstellen
Danke euch alle auf Autoit.de ![]()
MFG
tv_freeze
Thanx Schnitzel für dein Tip. ![]()
Bin nicht so gut in sachen Logik ...
Ich schau mir mal die Datei an.
Vielleicht hat ja jemannd doch ne schnelle Lösung ???
Hallo Autoitler,
Ich habe ein Problem mit folgenden Datei-Namen:
_Wumpscut_ - Hunger.mp3
01 - Tempel Der Wahrheit (Aufgemischt).mp3
01. Track 1.mp3
04 Juego En Silencio - Sangre Mia.mp3
08. Alphaville - Sounds Like A Melody.mp3
2HI - Bad Azz.mp3
32Crash - Merlin.mp3
69 Eyes, lost boys.mp3
Wie sortiert man solche Dateien am besten ? ![]()
Mein Verzeichnis soll so nach dem Sortieren aussehen... (Nur bei solchen Datei-Namen)
01\Tempel Der Wahrheit (Aufgemischt).mp3
01\Track 1.mp3
02\HI - Bad Azz.mp3
04\Juego En Silencio - Sangre Mia.mp3
08\Alphaville - Sounds Like A Melody.mp3
32\Crash - Merlin.mp3
69\Eyes, lost boys.mp3
PS: Herr Oscar hatte schon ein guten ansatz gemacht !
Danke dafür
Hier seine Routine:
[autoit][/autoit][autoit][/autoit][autoit]#include <File.au3>
[/autoit][autoit][/autoit][autoit]$sMP3Folder = FileSelectFolder('MP3-Verzeichnis (Quelle) auswählen', '', 3)
If Not FileExists($sMP3Folder) Then Exit MsgBox(0, 'Fehler!', 'Kein Quellverzeichnis ausgewählt!')
$sDestFolder = FileSelectFolder('Ziel-Verzeichnis auswählen (Unterverzeichnisse werden erstellt)', '', 3)
If Not FileExists($sDestFolder) Then Exit MsgBox(0, 'Fehler!', 'Kein Zielverzeichnis ausgewählt!')
$aMP3Files = _FileListToArray($sMP3Folder, '*.mp3', 1) ; alle MP3s einlesen (nicht rekursiv)
If @error Then Exit MsgBox(0, 'Fehler!', 'Keine MP3-Dateien gefunden!')
If StringRight($sMP3Folder, 1) <> '\' Then $sMP3Folder &= '\'
If StringRight($sDestFolder, 1) <> '\' Then $sDestFolder &= '\'
Dim $aID3
For $i = 1 To $aMP3Files[0]
$aID3 = _ReadID3Tag($sMP3Folder & $aMP3Files[$i]) ; ID3-Tags auslesen
If @error Then
ConsoleWrite('Die Datei "' & $sMP3Folder & $aMP3Files[$i] & '" verursachte Fehler-Nr. ' & @error & @CR)
Else
; wenn im ID3-Tag der Interpret nicht eingetragen ist, dann aus dem Dateinamen auslesen (" - " als Trenner zwischen Interpret und Titel)
If $aID3[1][1] = '' Then $aID3[1][1] = StringRegExpReplace($aMP3Files[$i], '(.+) - .+', '$1')
ToolTip('Kopiere "' & $aMP3Files[$i] & '" nach: "' & $sDestFolder & $aID3[1][1] & '\')
$iRet = FileMove($sMP3Folder & $aMP3Files[$i], $sDestFolder & $aID3[1][1] & '\', ![]()
If Not $iRet Then ConsoleWrite('Die Datei "' & $sMP3Folder & $aMP3Files[$i] & '" konnte nicht verschoben werden!' & @CR)
EndIf
Next
ToolTip('')
;===============================================================================
; Function Name: _ReadID3Tag($sPath)
; Description:: gibt ein Array mit den Daten aus den ID3-Tags zurück
; unterstützt werden die ID3-Tag-Versionen 2.3 und 2.4
; bei v2.4 müssen sich die ID3-Tags am Anfang der Datei befinden
; Parameter(s): $sPath = Pfad zu einer MP3-Datei
; Requirement(s): min. AutoIt v3.3.0.0
; Return Value(s): bei Erfolg: Array mit den ID3-Tagdaten (@error = 0)
; im Fehlerfall bekommt @error:
; 1 = Datei existiert nicht
; 2 = Datei konnte nicht zum lesen geöffnet werden
; 3 = Datei ist keine MP3-Datei
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _ReadID3Tag($sPath)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $hFile, $sData, $sID3Header, $iID3HeaderSize = 0, $iOffset, $iSize, $tmp
Local $aID3v2Tags[8] = ['TIT2', 'TPE1', 'TALB', 'TYER', 'TLEN', 'TRCK', 'TCON', 'TENC']
Local $aID3[11][2] = [ _
['Title', ''],['Artist', ''],['Album', ''],['Year', ''], _
['Length', '0'],['Track', ''],['Genre', ''],['Encoder', ''], _
['MPEG-Version', ''],['Bitrate', ''],['Sample-Freq.', '']]
Local $aMP3Version[4] = ['MPEG2.5', 'Reserved', 'MPEG2', 'MPEG1']
Local $aMP3Layer[4] = ['Reserved', 'Layer III', 'Layer II', 'Layer I']
Local $aMP3Bitrate[5][16] = [ _
[000, 032, 064, 096, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 000], _
[000, 032, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 384, 000], _
[000, 032, 040, 048, 056, 064, 080, 096, 112, 128, 160, 192, 224, 256, 320, 000], _
[000, 032, 048, 056, 064, 080, 096, 112, 128, 144, 160, 176, 192, 224, 256, 000], _
[000, 008, 016, 024, 032, 040, 048, 056, 064, 080, 096, 112, 128, 144, 160, 000]]
Local $aSampleFreq[3][4] = [[44100, 48000, 32000, 0],[22050, 24000, 16000, 0],[11025, 12000, 8000, 0]]
Local $sMP3FrameHeader, $iMP3Version, $sMP3Version, $sMP3Layer, $iMP3Bitrate, $iMP3SampleFreq
Local $iVBRFrames = -1, $iVBRFilesize, $iVBRFlags
$hFile = FileOpen($sPath, 16)
If $hFile = -1 Then Return SetError(2, 0, 0)
$sData = Binary(FileRead($hFile, 4))
If BinaryMid($sData, 1, 3) = '0x494433' Then ; ID3 v2.x Kennung gefunden
If BinaryMid($sData, 4, 1) = '0x03' Or BinaryMid($sData, 4, 1) = '0x04' Then ; nur v2.3 und 2.4
FileRead($hFile, 2) ; 2 Bytes überspringen
For $i = 0 To 3 ; berechne ID3-Headergröße (4 Bytes, jedoch nur jeweils die unteren 7 Bit)
$iID3HeaderSize = BitShift($iID3HeaderSize, -7) + ('0x' & Hex(FileRead($hFile, 1), 2))
Next
If $iID3HeaderSize > 0 Then
$sID3Header = Binary(FileRead($hFile, $iID3HeaderSize)) ; lese gesamten ID3-Header
For $i = 0 To 7
$iOffset = StringInStr(BinaryToString($sID3Header), $aID3v2Tags[$i]) ; Offset zu dem ID3-Tag
If $iOffset > 0 Then
$iSize = Hex(BinaryMid($sID3Header, $iOffset + 4, 4)) ; Größe des ID3-Frames
$tmp = BinaryMid($sID3Header, $iOffset + 11, Dec($iSize) - 1)
For $x = 1 To BinaryLen($tmp)
If BinaryMid($tmp, $x, 1) <> 0x00 Then $aID3[$i][1] &= BinaryToString(BinaryMid($tmp, $x, 1))
Next
EndIf
Next
EndIf
$sData = Binary(FileRead($hFile, 4)) ; 1. MP3-Frameheader auslesen
EndIf
EndIf
$sMP3FrameHeader = '0x' & Hex($sData)
If Hex(BitAND($sMP3FrameHeader, 0xFFE00000),
<> 'FFE00000' Then Return SetError(3, 0, 0) ; keine MP3-Datei, dann Return
$iMP3Version = BitShift(BitAND($sMP3FrameHeader, 0x180000), 19) ; welche MP3-Version
$sMP3Version = $aMP3Version[$iMP3Version] ; in Textform
$sMP3Layer = $aMP3Layer[BitShift(BitAND($sMP3FrameHeader, 0x60000), 17)] ; welcher Layer
$aID3[8][1] = $sMP3Version & ' / ' & $sMP3Layer ; ins Ausgabe-Array
$iMP3Bitrate = BitShift(BitAND($sMP3FrameHeader, 0xF000), 12) ; Bitraten-Index auslesen
Switch $sMP3Version ; je nach MPEG-Version Bitrate aus der Tabelle holen
Case 'MPEG1'
$aID3[9][1] = $aMP3Bitrate[$iMP3Version - ($iMP3Version > 1)][$iMP3Bitrate]
Case 'MPEG2', 'MPEG2.5'
If $sMP3Layer = 'Layer I' Then
$aID3[9][1] = $aMP3Bitrate[3][$iMP3Bitrate]
Else
$aID3[9][1] = $aMP3Bitrate[4][$iMP3Bitrate]
EndIf
EndSwitch
$iMP3SampleFreq = BitShift(BitAND($sMP3FrameHeader, 0xC00), 10) ; Sample-Frequenz-Index auslesen
$aID3[10][1] = $aSampleFreq[2 - ($iMP3Version - ($iMP3Version > 1))][$iMP3SampleFreq] ; und Wert aus der Tabelle holen
Do ; evtl. Leerbytes überspringen
$tmp = FileRead($hFile, 1)
If @error Then ExitLoop
Until $tmp <> 0x00 Or @error
If $tmp = 0x58 And BinaryToString(FileRead($hFile, 3)) = 'ing' Then ; MP3 mit VBR (Xing-Header gefunden)?
$iVBRFlags = '0x' & Hex(FileRead($hFile, 4)) ; VBR-Flags auslesen
If BitAND($iVBRFlags, 0x3) Then ; wenn die Einträge vorhanden sind, dann...
$iVBRFrames = Dec(Hex(FileRead($hFile, 4))) ; Anzahl der VBR-Frames auslesen
$iVBRFilesize = Dec(Hex(FileRead($hFile, 4))) ; Dateigröße auslesen
$aID3[4][1] = $iVBRFrames * 1152 / $aID3[10][1] * 1000 ; VBR Laufzeit
$aID3[9][1] = 'VBR ~' & Int($iVBRFilesize * 8 / ($aID3[4][1] / 1000) / 1000) ; VBR durchschnittliche Bitrate
EndIf
Else
If $aID3[4][1] = 0 Then $aID3[4][1] = (FileGetSize($sPath) *
/ ($aID3[9][1] * 1000) * 1000 ; alternative CBR Laufzeit
$aID3[9][1] = 'CBR ' & $aID3[9][1]
EndIf
$aID3[4][1] = _MyTicksToTime($aID3[4][1]) ; Laufzeit (Ticks to hour:min:sec)
$aID3[9][1] &= ' kBit/s'
$aID3[10][1] &= ' Hz'
FileClose($hFile)
Return $aID3
EndFunc ;==>_ReadID3Tag
Func _MyTicksToTime($iTicks)
Local $iHour, $iMins, $iSecs
$iHour = Int($iTicks / 3600000)
$iTicks -= $iHour * 3600000
$iMins = Int($iTicks / 60000)
$iTicks -= $iMins * 60000
$iSecs = Int($iTicks / 1000)
Return StringFormat('%02i:%02i:%02i', $iHour, $iMins, $iSecs)
EndFunc ;==>_MyTicksToTime
Ich bitte um Lösungsvorschäge
MFG
tv_freeze
Vielen Dank allen die mir geantwortet haben. ![]()
Thanx für eure Zeit...
cu auf Autoit.de
tv_freeze
Hallo, Guys
wie kann man von XP bestimmte Dienste abschalten ?
Wenn ich offline gehe möchte ich einige Dienste per Script auschalten,
ohne immer die Windows-Console öffnen und den Dienst per Mouseclick auf beenden zu klicken.
zb. Druckwarteschlange
Beispiel Code:
Global $PID, $s1, $s2, $zeit, $begin
; Script to End myPrivate Processes!
; 1 - Wait of Dienste Windows and Aktiv ?
;
WinWait("Dienste", "Dienste (Lokal)")
WinActivate("Dienste", "Dienste (Lokal)")
WinWaitActive("Dienste", "Dienste (Lokal)")
;
; 2 - Maximiere the Window
;
MouseClick("left", 230, 10, 2)
;
; 3 - Move to Druckwarteschlange & Stop Service
;
MouseClick("left", 396, 506, 1)
StopService()
;
; 4 - Dienste-Windows Close
;
MouseClick("left", 1141, 8, 1)
;
$s1 = @DesktopWidth/2
$s2 = @DesktopHeight/2
MouseMove($s1,$s2)
;
; End
Exit
; -------- Functionen --------
Func StopService()
MouseClick("left", 203, 151, 1)
$zeit = "10"
$begin = TimerInit()
WinWait("Dienststeuerung", "zu beenden")
While WinExists("Dienststeuerung", "zu beenden")
MyTimer() ; Zeit ablaufen lassen
WEnd
EndFunc
;------------------------------------------------------------------
; Zeit läuft
Func MyTimer()
Switch TimerDiff($begin)
Case $zeit * 1000 to ($zeit + 1) * 1000
; Wenn die Zeit abgelaufen ist, prüfen und auf 'Enter' drücken!
If WinExists("Dienststeuerung", "zu beenden") Then
Send("{ENTER}")
EndIf
EndSwitch
EndFunc
Gibt es eine andere Möglichkeit ?
Gruß
tv_freeze
An alle Hobby-Autoit-Programmierer,
Herzlichen Dank an alle die Interesse an meinem Programm haben oder hatten. ![]()
Ich habe mein Problem (-für meine Zwecke-) entzwischen gelöst. ![]()
Hatte eigendlicht nicht vorgesehen auch noch nach MP3-tags zu sortieren, ist aber vielleicht besser.
Danke Xenobiologist für den Hinweis.
Das Programm kann noch weiter optimiert werden, aber es mach schon eigentlich das was ich wollte.
Es sortiert meine MP3-Dateien...
Spezial-Thanx an: ---> Oscar <--- Muss wohl ein Profi sein ???
Sein Code ist wirklich ' BESSER ' als meiner.
:wacko:
und kürzer !
Hat aber dafür keine Oberfläche (GUI_Fenster). Schade...
Vielleicht kann jemannd den von Oscar und meinen kombinieren ? Wenn es recht ist und/oder erlaubt ![]()
Wer Interesse hat kann hier meinen zweiten Teil meines Codes herunterladen und Ausprobieren.
Script vielleicht vorher anschauen... Code Teil2:
MFG
tv_freeze
Danke allen die mir einige Tips, gegeben haben.
Lebenszeit ist kostbar... ![]()
bye, bye
Hallo, Autoit-Programmierer !
Ich habe ein Problem. ![]()
Suche nach einer Möglichkeit MP3-Dateien, die in einer Directory liegen
Muster: Peter Maffay - Sonne in der Nacht.mp3
Peter Maffay - Alter Mann.mp3
Peter Maffay - Hey Himmelstor.mp3
Nena - Haus der drei Sonnen.mp3
Nena - Rette mich.mp3
Nena - Feuer und Flamme.mp3
also mehrere Lieder von einem Künstler sollen verschoben werden.
Das Autoit-Script soll also in der Lage sein alle Lieder von einem Künstler zu suchen und eine neue Directory erzeugen und dann die Dateien
dorthin verschieben. Wie kann man sowas machen ?
Kann mir jemand so ein Script erstellen oder tipps geben.
Ich Danke für alle Hinweise, Tips oder ein funktionierendes Script
bye tv_freeze