- Offizieller Beitrag
Hi,
hier habe ich mal alle Möglichkeiten des 'Scripting.FileSystemObject' in AutoIt umgesetzt.
Die meisten dieser Methoden stehen ja als Funktionen direkt in AutoIt zur Verfügung.
Insofern wäre es vielleicht interessant, mal einen repräsentativen Vergleichstest durchzuführen.
FileSystemObject
enthält als eigene Objekte:
Drive Stellt den Zugriff auf ein Laufwerk oder eine Collection von Laufwerken zur Verfügung.
File Stellt den Zugriff auf eine Datei oder eine Collection von Dateien zur Verfügung.
Folder Stellt den Zugriff auf einen Ordner Laufwerk oder eine Collection von Ordnern zur Verfügung.
TextStream Stellt eine Quelle zur Verfügung, aus der Text gelesen werden kann, in die Text geschrieben
werden kann, oder an die Text angehängt werden kann.
Quelle: MS
http://www.microsoft.com/germany/technet/datenbank/articles/600360.mspx#EVD
Object Drive
Spoiler anzeigen
verfügbare Eigenschaften
AvailableSpace Der freie Speicherplatz auf dem Laufwerk in Byte. Um den freien Speicherplatz in KB
zu erhalten, teilen Sie diesen Wert durch 1.024 (es handelt sich um den Speicherplatz,
der dem aktuellen Benutzer zur Verfügung steht - wenn Kontingente verwendet werden,
kann der Wert kleiner sein als der gesamte zur Verfügung stehende freie Speicherplatz).
DriveLetter Der dem Laufwerk zugewiesene Laufwerksbuchstabe ohne den angehängten Doppelpunkt.
Für das Diskettenlaufwerk wird also zum Beispiel der Buchstabe A verwendet.
DriveType Ein Integer-Wert, der den Laufwerkstyp angibt:
1 - Wechsellaufwerk
2 - Festplatte
3 - Netzlaufwerk
4 - CD-ROM
5 - RAM-Laufwerk
FreeSpace Im Gegensatz zu AvailableSpace gibt diese Eigenschaft den gesamten zur Verfügung
stehenden freien Festplattenplatz in Byte zurück.
FileSystem Der Typ des verwendeten Dateisystems (FAT, FAT 32, NTFS).
IsReady Gibt an, ob auf das Laufwerk zugegriffen werden kann. Wenn sich zum Beispiel keine CD
im CD-Laufwerk oder keine Diskette im Diskettenlaufwerk befindet, hat diese Eigenschaft
den Wert False.
Path Pfad zum Laufwerk. Bei lokalen Laufwerken finden Sie unter dieser Eigenschaft den
Laufwerksbuchstaben (zum Beispiel A). Bei Netzlaufwerken gibt die Eigenschaft den
UNC-Pfad des Laufwerkes zurück (zum Beispiel \\Server1\SharedFolder).
RootFolder Der Pfad zum Stammordner des Laufwerks.
SerialNumber Die Seriennummer des Laufwerks. Bei Diskettenlaufwerken oder Netzlaufwerken hat diese
Eigenschaft normalerweise den Wert 0.
ShareName Freigabename eines Netzwerklaufwerks.
TotalSize Gibt die Gesamtgröße des Laufwerks in Byte zurück (um die Gesamtgröße in KB zu erhalten,
teilen Sie den Wert durch 1.024. Für die Gesamtgröße in MB teilen Sie den Wert durch
1.048.576 (1.024 x 1.024).
VolumeName Der Volumenname des Laufwerks.
Alles anzeigen
Auflistung aller Laufwerke
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $colDrives = $oFSO.Drives
$str = ''
For $objDrive in $colDrives
$str &= $objDrive.DriveLetter & @LF
Next
MsgBox(0, 'Laufwerksbuchstaben', $str)
Referenz auf ein einzelnes Laufwerk
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $objDrive = $oFSO.GetDrive("C:")
MsgBox(0, 'Verfügbarer Speicherplatz', $objDrive.AvailableSpace)
alle Laufwerkseigenschaften
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $colDrives = $oFSO.Drives
For $oDrive in $colDrives
$str = ''
If $oDrive.IsReady Then ; viele Eigenschaften sind nur verfügbar, wenn Lw bereit ==> Medium vorhanden
$str &= _
"Verfügbarer Speicherplatz: " & $oDrive.AvailableSpace & @LF & _
"Laufwerksbuchstabe: " & $oDrive.DriveLetter & @LF & _
"Laufwerkstyp: " & $oDrive.DriveType & @LF & _
"Dateisystem: " & $oDrive.FileSystem & @LF & _
"Bereit: " & $oDrive.IsReady & @LF & _
"Pfad: " & $oDrive.Path & @LF & _
"Stammordner: " & $oDrive.RootFolder & @LF & _
"Seriennummer: " & $oDrive.SerialNumber & @LF & _
"Freigabename: " & $oDrive.ShareName & @LF & _
"Gesamtgröße: " & $oDrive.TotalSize & @LF & _
"Volumenname: " & $oDrive.VolumeName
MsgBox(0, 'Laufwerkseigenschaften', $str)
Else
$str &= _
"Laufwerksbuchstabe: " & $oDrive.DriveLetter & @LF & _
"Laufwerkstyp: " & $oDrive.DriveType & @LF & _
"Bereit: " & $oDrive.IsReady & @LF & _
"Freigabename: " & $oDrive.ShareName
MsgBox(0, 'Laufwerkseigenschaften', $str)
EndIf
Next
Object Folder
Spoiler anzeigen
verfügbare Eigenschaften
Attributes Ein Bitfeld mit den Attributen des Ordners. Weitere Informationen finden Sie im
Abschnitt Verwalten von Ordnerattributen in diesem Kapitel.
DateCreated Erstellungsdatum des Ordners.
DateLastAccessed Letztes Zugriffsdatum.
DateLastModified Letztes Bearbeitungsdatum.
Drive Laufwerksbuchstabe mit Doppelpunkt (zum Beispiel C:) des Laufwerks, in dem der Ordner
gespeichert ist.
Files Eine Collection mit Objekten vom Typ File zum Zugriff auf die im Ordner gespeicherten
Dateien.
IsRootFolder Ein Boolean-Wert, der anzeigt, ob es sich um einen Stammordner (wie zum Beispiel C:\)
handelt.
Name Name des Ordners ohne Pfadangaben (zum Beispiel System32).
ParentFolder Name des Ordners, in dem der Ordner gespeichert ist. Für den Ordner C:\Scripts wäre
dies zum Beispiel C:\.
Path Vollständiger Pfad des Ordners (zum Beispiel C:\Windows\System32).
ShortName Ordnername in der MS-DOS-Syntax mit der 8.3-Namenskonvention. Der Ordner
C:\Windows\Programme wird zum Beispiel als Progra~1 angezeigt
ShortPath Pfadname des Ordners in der MS-DOS-Syntax. Der Ordner C:\Windows\Programme wird zum
Beispiel als C:\Windows\Progra~1 angezeigt.
Size Gesamtgröße in Byte aller Inhalte des Ordners. Dies schließt die in dem Ordner
gespeicherten Dateien und alle Dateien in Unterordnern ein.
SubFolders Eine Collection mit den Unterordnern des Ordners. Die Unterordner in den Unterordnern
sind nicht in dieser Collection enthalten.
Type Ein String mit einer Beschreibung des Ordnertyps - meist File Folder.
Alles anzeigen
Referenz auf einen Ordner
- erforderlich Pfadangabe als lokaler Pfad (z.B. D:\Daten) oder als UNC-Pfad (z.B. \\accounting\receivables)
- Wildcards sind nicht zulässig
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFolder = $oFSO.GetFolder($Path)
; Bsp.:
$oFolder = $oFSO.GetFolder("C:\Daten") ; erzeugt eine Referenz auf "C:\Daten"
$oFolder = $oFSO.GetFolder(".") ; erzeugt eine Referenz auf den AKTUELLEN Ordner
$oFolder = $oFSO.GetFolder("..") ; erzeugt eine Referenz auf den ÜBERGEORDNETEN Ordner
Fehlervermeidung (Ordner nicht vorhanden/vorhanden), Objekt nur erstellen, wenn Ordner existiert oder
Ordner erstellen und dann referenzieren
If $oFSO.FolderExists($Path) Then
$oFolder = $oFSO.GetFolder($Path)
Else
MsgBox(0, 'ACHTUNG!', 'Ordner: "' & $Path & '", existiert nicht. Referenz wurde nicht erstellt.') ; Oder:
;~ $oFSO.CreateFolder($Path) ; Ordner erstellen
;~ $oFolder = $oFSO.GetFolder($Path) ; referenzieren
EndIf
FileSystemObject kann nur Ordner auf dem lokalen Computer erstellen.
Um Ordner auf einem Remotecomputer zu erstellen kann das Objekt WshController verwendet werden
(oder lokal erstellen und mit WMI verschieben)
Ordner löschen
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.DeleteFolder($Path)
Die Methode DeleteFolder löscht den Ordner und alle Inhalte sofort.
Es wird keine Bestätigung angefordert, und die Elemente werden auch nicht im Papierkorb abgelegt!
Ordner über Wildcards löschen
z.B. besteht folgende Struktur:
gelöscht werden sollen alle Unterordner, die mit 'U' beginnen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.DeleteFolder("C:\MyData\U*")
Wichtig! Wildcards können nur im letzten Teil des Pfades verwendet werden.
Ordner und Inhalte kopieren
Methode: CopyFolder
Werden keine Wildcards verwendet, funktioniert die Methode wie der Befehl Xcopy /E: sie kopiert alle Dateien und alle Unterordner, inklusive aller leeren Unterordner.
Die Methode benötigt zwei Parameter: Quellordner und Zielordner
Optionaler dritter Parameter: Überschreiben (Standardwert 'TRUE')
Wird Überschreiben auf 'FALSE' gesetzt und im Zielordner ist bereits ein gleichnamiger Ordner vorhanden, bricht der Vorgang mit einem Laufzeitfehler ab.
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.CopyFolder($Path_Quelle, $Path_Ziel [, $OverWriteFiles=True])
Ordner mit Hilfe von Wildcards kopieren
Bsp.: alle Ordner (+ Unterordner mit Dateien), die mit 'Log' beginnen in den Ordner Archiv kopieren
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.CopyFolder("C:\Scripts\Log*" , "C:\Archive", True)
Verschieben von Ordnern und Inhalten
Methode: MoveFolder
Die Methode benötigt zwei Parameter: Quellordner und Zielordner ; Angabe als Lokaler oder UNC-Pfad
Überschreiben bestehender Ordner ist nicht möglich
Bsp.: verschiebt den lokalen Ordner C:\Scripts in die Freigabe \\helpdesk\management.
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.MoveFolder($Path_Quelle, $Path_Ziel)
$oFSO.MoveFolder("C:\Scripts", "\\helpdesk\management")
Ordner umbenennen
Hierfür gibt es keine eigene Methode. Es wird MoveFolder genutzt
Bsp.: Ordner C:\FSO\Samples in C:\FSO\Scripts umbenennen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.MoveFolder("C:\FSO\Samples", "C:\FSO\Scripts")
Ordner Eigenschaften abfragen
Beachten: Die Eigenschaften 'Files' und 'Subfolders' geben eine Collection zurück.
'Subfolders' arbeitet nicht rekursiv
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'ORDNERPFAD'
$oFolder = $oFSO.GetFolder($Path)
$str = _
"DateCreated: " & $oFolder.DateCreated & @LF & _
"DateLastAccessed: " & $oFolder.DateLastAccessed & @LF & _
"DateLastModified: " & $oFolder.DateLastModified & @LF & _
"Drive: " & $oFolder.Drive & @LF & _
"IsRootFolder: " & $oFolder.IsRootFolder & @LF & _
"Name: " & $oFolder.Name & @LF & _
"ParentFolder: " & $oFolder.ParentFolder & @LF & _
"Path: " & $oFolder.Path & @LF & _
"ShortName: " & $oFolder.ShortName & @LF & _
"ShortPath: " & $oFolder.ShortPath & @LF & _
"Size: " & $oFolder.Size & @LF & _
"Type: " & $oFolder.Type
MsgBox(0, 'Eigenschaften Ordner', $str)
$str = ''
For $File In $oFolder.Files
$str &= $File.Name & @LF
Next
MsgBox(0, 'Dateien im Ordner', $str)
$str = ''
For $SubFolder In $oFolder.Subfolders
$str &= $SubFolder.Name & @LF
Next
MsgBox(0, 'Unterordner im Ordner', $str)
Ordnerattribute
Hidden 2 Versteckt - Zeigt an, dass der Ordner versteckt ist.
System 4 System - Zeigt an, dass es sich um einen Systemordner handelt.
Directory 16 Ordner - Der Standardwert für alle Ordner.
Archive 32 Archiv - Das Archiv-Attribut wird zum Beispiel von Sicherungsprogrammen
verwendet. Diese stellt über das Attribut fest, welche Dateien und Ordner
gesichert werden müssen.
Compressed 2048 Komprimiert - Zeigt an, ob der Ordner komprimiert ist.
Anzeigen von Ordnerattributen
Ordnerattribute (und auch Dateiattribute) sind Bitfelder.
Das Abfragen erfolgt mit BitAnd(), d.h. wenn der übergebene Wert im Ausdruck enthalten ist, ist die Abfrage wahr.
Das Setzen erfolgt mit BitXOR(), d.h. hier wird 'geswitcht'.
Ist der übergebene Wert enthalten, wird er aus dem Ausdruck entfernt (binär subtrahiert).
Ist der übergebene Wert nicht enthalten, wird er in den Ausdruck eingefügt (binär addiert).
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'ORDNERPFAD'
$oFolder = $oFSO.GetFolder($Path)
If BitAND($oFolder.Attributes, 2) Then
MsgBox(0, 'Attribut', "Versteckt")
EndIf
If BitAND($oFolder.Attributes, 4) Then
MsgBox(0, 'Attribut', "System")
EndIf
If BitAND($oFolder.Attributes, 16) Then
MsgBox(0, 'Attribut', "Ordner")
EndIf
If BitAND($oFolder.Attributes, 32) Then
MsgBox(0, 'Attribut', "Archiv")
EndIf
If BitAND($oFolder.Attributes, 2048) Then
MsgBox(0, 'Attribut', "Komprimiert")
EndIf
Ändern von Ordnerattributen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'ORDNERPFAD'
$oFolder = $oFSO.GetFolder($Path)
If Not BitAND($oFolder.Attributes, 2) Then ; wenn nicht 'versteckt'
$oFolder.Attributes = BitXOR($oFolder.Attributes, 2) ; 'Versteckt' setzen
EndIf
Rekursive Auflistung von Unterordnern
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'ORDNERPFAD'
Dim $str = ''
_ShowSubFolders($oFSO.GetFolder($Path))
Func _ShowSubFolders($Folder)
For $Subfolder in $Folder.SubFolders
$str &= $Subfolder.Path & @LF
_ShowSubFolders($Subfolder)
Next
EndFunc
MsgBox(0, 'Rekursive Auflistung Unterordner', $str)
Object File
Spoiler anzeigen
verfügbare Eigenschaften
Attributes Ein Bitfeld mit den Attributen der Datei.
DateCreated Das Erstellungsdatum der Datei.
DateLastAccessed Das Datum des letzten Dateizugriffs.
DateLastModified Das Datum der letzten Änderung an der Datei.
Drive Laufwerksbuchstabe mit Doppelpunkt des Laufwerks, auf dem die Datei gespeichert ist.
Name Dateiname ohne Pfadinformationen. Für die Datei C:\Windows\System32\Scrrun.dll
wäre das zum Beispiel Scrrun.dll.
ParentFolder Name des Ordners, in dem die Datei gespeichert ist. Für C:\Windows\System32\Scrrun.dll
wäre das zum Beispiel System32.
Path Der vollständige Pfad der Datei (zum Beispiel C:\Windows\System32\Scrrun.dll).
ShortName Der MS-DOS-Name der Datei (in 8.3-Schreibweise). Für die Datei C:\MySpreadsheet.xls
ist das zum Beispiel MySpre~1.xls.
ShortPath Der Pfad in MS-DOS-Schreibweise (in 8.3-Schreibweise). Für die Datei
C:\Windows\Program Files\MyScript.vbs wäre das zum Beispiel C:\Windows\Progra~1\MyScript.vbs.
Size Gesamtgröße der Datei in Byte.
Type Ein String mit der Dateiart (zum Beispiel Microsoft Word Document).
Alles anzeigen
Methode: GetFile
Parameter: Dateiname (entweder ein lokaler Pfad oder ein UNC-Pfad)
Referenz auf eine Datei erstellen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
; z.B.
$oFile = $oFSO.GetFile('D:\Data\Test.txt') ; kpl. Pfadname
$oFile = $oFSO.GetFile('Test.txt') ; Datei ist im Skript-Ordner
$oFile = $oFSO.GetFile('.\Test.txt') ; Datei ist im übergeordneter Ordner
Zugriffsfehler vermeiden, vor Zugriff auf Existenz abfragen
If $oFSO.FileExists($Path) Then
$oFile = $oFSO.GetFile($Path)
Else
MsgBox(0, 'FEHLER', "Datei ist nicht vorhanden.")
EndIf
Das Prüfen mit Wildcards (z.B. *.txt) auf eine Gruppe von Dateien ist nicht möglich.
Löschen einer Datei
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFSO.DeleteFile($Path [, $Force=False])
Löscht standardmäßig keine schreibgeschützten Dateien, Abbruch mit Laufzeitfehler
Um schreibgeschützte Dateien zu löschen den Parameter $Force auf 'TRUE' setzen.
Löschen von Dateien mit Wildcard
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD\*log.*' ; alle Dateien im Pfad mit 'log' irgendwo im Dateinamen
$oFSO.DeleteFile($Path)
Kopieren von Dateien
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.CopyFile($Path_Quelle, $Path_Ziel [, $OverWriteExisting=False])
Standardmäßig werden beim Kopieren keine existierenden Dateien überschrieben.
Dies kann erzwungen werden, indem der Parameter $OverWriteExisting auf 'TRUE' gesetzt wird.
Kopieren von mehreren Dateien mit Wildcard
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.CopyFile('D:\Data\*.doc', $Path_Ziel [, $OverWriteExisting=False])
; Alle 'doc'-Dateien des Ordners 'D:\Data' werden in den Zielordner kopiert.
$oFSO.CopyFile('D:\Data\*.*', $Path_Ziel [, $OverWriteExisting=False])
; Alle 'Dateien des Ordners 'D:\Data' werden in den Zielordner kopiert.
Verschieben einer Datei
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$oFSO.MoveFile('D:\Data\Test.doc', $Path_Ziel) ; $Path_Ziel muß MIT abschließendem Backslash deklariert werden!
Mehrere Dateien verschieben
[autoit]$oFSO.MoveFile('D:\Data\*.doc', $Path_Ziel)
; Alle 'doc'-Dateien des Ordners 'D:\Data' werden in den Zielordner verschoben.
Eine Datei umbenennen
Hierfür gibt es keine eigene Methode. Es wird MoveFile genutzt
Bsp.: Umbenennen 'Test.doc' in 'Test.bak'
$oFSO.MoveFile('D:\Data\Test.doc', 'D:\Data\Test.bak')
[/autoit]Alle Dateieigenschaften auflisten
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
$str = _
"DateCreated: " & $oFile.DateCreated & @LF & _
"DateLastAccessed: " & $oFile.DateLastAccessed & @LF & _
"DateLastModified: " & $oFile.DateLastModified & @LF & _
"Drive: " & $oFile.Drive & @LF & _
"Name: " & $oFile.Name & @LF & _
"ParentFolder: " & $oFile.ParentFolder & @LF & _
"Path: " & $oFile.Path & @LF & _
"ShortName: " & $oFile.ShortName & @LF & _
"ShortPath: " & $oFile.ShortPath & @LF & _
"Size: " & $oFile.Size & @LF & _
"Type: " & $oFile.Type
MsgBox(0, 'Datei Eigenschaften', $str)
Dateiattribute
Normal 0 Datei ohne Attribute.
Read-only 1 Datei kann nur gelesen werden.
Hidden 2 Versteckte Datei.
System 4 Datei ist Teil des Betriebssystems.
Archive 32 Datei ist zur Sicherung markiert.
Alias 64 Datei ist eine Verknüpfung, die auf eine andere Datei verweist.
Compressed 2048 Datei ist komprimiert.
Anzeigen von Dateiattributen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
If BitAND($oFile.Attributes, 0) Then
MsgBox(0, 'Attribut', "Keine Attribute vorhanden")
EndIf
If BitAND($oFile.Attributes, 1) Then
MsgBox(0, 'Attribut', "Read-only")
EndIf
If BitAND($oFile.Attributes, 2) Then
MsgBox(0, 'Attribut', "Versteckt")
EndIf
If BitAND($oFile.Attributes, 4) Then
MsgBox(0, 'Attribut', "System")
EndIf
If BitAND($oFile.Attributes, 32) Then
MsgBox(0, 'Attribut', "Archiv")
EndIf
If BitAND($oFile.Attributes, 64) Then
MsgBox(0, 'Attribut', "Alias")
EndIf
If BitAND($oFile.Attributes, 2048) Then
MsgBox(0, 'Attribut', "Komprimiert")
EndIf
Dateiattribute ändern
Folgende Attribute können geändert werden:
ReadOnly, Hidden, System, Archive
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
If Not BitAND($oFile.Attributes, 1) Then ; wenn nicht 'Read-only'
$oFile.Attributes = BitXOR($oFile.Attributes, 1) ; 'Read-only' setzen
EndIf
Alle Attribute gleichzeitig ausschalten
$oFile.Attributes = BitAND($oFile.Attributes, 0)
[/autoit]
Pfadinformationen
GetAbsolutePathName Gibt den vollständigen Pfad einer Datei zurück (zum Beispiel C:\FSO\Scripts\Scriptlog.txt).
GetParentFolderName Gibt den Pfad des Ordners zurück, in dem die Datei gespeichert ist (zum Beispiel C:\FSO\Scripts).
GetFileName Gibt den Dateinamen ohne Pfadinformationen zurück (zum Beispiel ScriptLog.txt).
GetBaseName Gibt den Basisnamen der Datei zurück (der Dateiname ohne Erweiterung - zum Beispiel ScriptLog).
GetExtensionName Gibt die Erweiterung der Datei zurück (zum Beispiel txt).
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
$str = _
"Absoluter Pfad: " & $oFSO.GetAbsolutePathName($oFile) & @LF & _
"Überg. Ordner: " & $oFSO.GetParentFolderName($oFile) & @LF & _
"Dateiname: " & $oFSO.GetFileName($oFile) & @LF & _
"Basisname: " & $oFSO.GetBaseName($oFile) & @LF & _
"Erweiterung: " & $oFSO.GetExtensionName($oFile)
MsgBox(0, 'Pfadinformationen', $str)
Abfragen der Dateiversion
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
MsgBox(0, 'Dateiversion', $oFSO.GetFileVersion($Path))
Textdateien erstellen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'DATEIPFAD'
$oFile = $oFSO.CreateTextFile($Path [,$Overwrite=True])
; Mit $Overwrite=True (Standard) wird eine evtl. bereits bestehende Datei überschrieben.
Generieren von Dateinamen
Es können automatisch Dateinamen generiert werden. Diese beginnen alle mit 'rad', gefolgt von 5 beliebigen Buchstaben/Ziffern
und der Dateiendung 'tmp'. Maximal sind somit 9.894 eindeutige Dateinamen möglich
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$str = ''
For $i = 1 to 10
$strTempFile = $oFSO.GetTempName
$str &= $strTempFile & @LF
Next
MsgBox(0, 'automatisch generierte Dateinamen', $str)
Object TextStream
Spoiler anzeigen
Erstellen und Bennennen einer Textdatei
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$strPath = 'DATEIPFAD'
$strFileName = $oFSO.GetTempName
$strFullName = $oFSO.BuildPath($strPath, $strFileName)
$oFile = $oFSO.CreateTextFile($strFullName)
$oFile.Close
Öffnen von Textdateien
Objekt vom Typ TextStream
Methode: OpenTextFile
Modi:
ForReading (1) Die Datei wird im Lesemodus geöffnet. Schreiben in die Datei
ist nicht möglich (hierzu müssten Sie die Datei schließen und
dann im Modus ForWriting oder ForAppending neu öffnen).
ForWriting (2) In diesem Modus werden die vorhanden Dateien der Textdatei mit
den neuen Daten überschrieben.
ForAppending (8) In diesem Modus werden die neuen Dateien an die bestehenden
Daten der Datei angehängt.
Const $ForReading = 1
Const $ForWriting = 2
Const $ForAppending = 8
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.OpenTextFile($Path, 'Modus')
; z.B. 'Test.txt' zum Lesen öffnen
$oFile = $oFSO.OpenTextFile('D:\Data\Test.txt', 1)
Methoden zum Lesen
Read Liest die angegeben Anzahl an Zeichen. Der folgende Befehl liest zum
Beispiel die ersten 12 Zeichen der ersten Zeile und speichert diese
in der Variable $strText:
$strText = $oTextFile.Read(12)
ReadLine Liest eine Zeile auf der Textdatei. Der folgende Befehl liest zum
Beispiel die erste Zeile und speichert sie in der Variable $strText:
$strText = $oTextFile.ReadLine
ReadAll Liest die gesamte Textdatei.
Skip Überspringt die angegebene Anzahl an Zeichen. Der folgende Befehl
überspringt zum Beispiel die ersten 12 Zeichen. Alle weiteren
Leseoperationen beginnen also bei Zeichen 13:
$oTextFile.Skip(12)
SkipLine Überspringt eine Zeile. Der folgende Code liest zum Beispiel die erste
und die dritte Zeile:
$strText = $oTextFile.Readline
$oTextFile.SkipLine
$strText = $oTextFile.Readline
Alles anzeigen
Achtung: Der Versuch eine leere Datei zu Lesen führt zu einem Laufzeitfehler.
Dies läßt sich umgehen, indem nur Dateien >0 geöffnet werden.
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.GetFile($Path)
If $oFile.Size > 0 Then
$oReadFile = $oFSO.OpenTextFile($Path, 1)
$strContents = $oReadFile.ReadAll
MsgBox(0, 'Datei Inhalt', $strContents)
$oReadFile.Close
Else
MsgBox(0, 'Datei Inhalt', "Die Datei ist leer.")
EndIf
Zeilenweises Lesen einer Textdatei
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.OpenTextFile($Path, 1)
$n = 1
Do
$strLine = $oFile.ReadLine
MsgBox(0, 'Text Zeile: ' & $n, $strLine)
$n += 1
Until $oFile.AtEndOfStream
$oFile.Close
Eine Textdatei Zeichen für Zeichen einlesen
Methode: Read
Bsp.: aus jeder Zeile nur das sechste Zeichen Auslesen
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.OpenTextFile($Path, 1)
$str = ''
Do
$oFile.Skip(5)
$strCharacters = $oFile.Read(1)
$str &= $strCharacters & @LF
$oFile.SkipLine
Until $oFile.AtEndOfStream
$oFile.Close
In Textdateien schreiben
Methoden: Write, WriteLine oder WriteBlankLines
Write Schreibt Daten in eine Textdatei, OHNE einen Zeilenumbruch anzuhängen.
Der folgende Code schreibt zum Beispiel zwei Strings in eine Textdatei:
$oFile.Write ("Die ist Zeile 1.")
$oFile.Write ("Die ist Zeile 2.")
Die Textdatei sieht dann so aus:
Die ist Zeile 1.Die ist Zeile 2.
WriteLine Schreibt Daten in eine Textdatei und hängt einen Zeilenumbruch an.
Der folgende Code schreibt zum Beispiel zwei Strings in eine Textdatei:
$oFile.WriteLine ("Die ist Zeile 1.")
$oFile.WriteLine ("Die ist Zeile 2.")
Das Ergebnis sieht so aus:
Die ist Zeile 1.
Die ist Zeile 2.
WriteBlankLines Schreibt eine leere Zeile in die Textdatei. Der folgende Code schreibt zwei Strings
in die Textdatei und trennt diese durch einen Leerzeile:
$oFile.Writeline ("Dies ist Zeile 1.")
$oFile.WriteBlankLines(1)
$oFile.Writeline ("Dies ist Zeile 2.")
Das Ergebnis sieht so aus:
Dies ist Zeile 1.
Dies ist Zeile 2.
Alles anzeigen
Überschreiben von Dateien
Wird eine Datei im Modus ForWriting geöffnet, dann werden die in der Datei vorhanden Daten mit den neu geschriebenen Daten überschrieben.
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.OpenTextFile($Path, 2)
$oFile.Write('Text neu')
$oFile.Close
Neue Daten an bestehende Daten anhängen
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
$Path = 'DATEIPFAD'
$oFile = $oFSO.OpenTextFile($Path,
$oFile.WriteLine('TextZeile angehängt')
$oFile.Close