FileAppend

Schreibt Text an das Ende einer Datei (und erstellt sie vorher, wenn nötig).

FileAppend , Text, DateiName, Kodierung

Parameter

Text

Wenn leer oder weggelassen, wird DateiName als leere Datei erstellt (wenn die Datei bereits existiert, wird nur ihr Änderungsdatum aktualisiert). Andernfalls geben Sie den Text an, der an das Ende der Datei angefügt werden soll. Dieser Text kann LF-Zeichen (`n) enthalten, um neue Zeilen zu beginnen. Außerdem kann via Fortsetzungsbereich eine lange Zeile in mehrere kurze Zeilen aufgeteilt werden.

Handelt es sich bei Text um %ClipboardAll% oder um eine Variable, der zuvor der Wert von ClipboardAll zugewiesen wurde, wird DateiName bedingungslos mit dem kompletten Inhalt des Zwischenspeichers überschrieben (d.h. FileDelete ist nicht notwendig).

DateiName

Wenn dieser und der Kodierung-Parameter weggelassen werden, wird die Ausgabedatei der innersten umschlossenen dateilesenden Schleife verwendet (falls vorhanden). Andernfalls geben Sie den Namen der Datei an, an die der Text angefügt werden soll. Wenn kein absoluter Pfad angegeben ist, wird die Datei im A_WorkingDir-Verzeichnis vermutet. Das Zielverzeichnis muss bereits existieren.

Zeilenumbruchübersetzung: Um die Zeilenumbruchübersetzung zu deaktivieren, setzen Sie ein Sternchen vor den Dateinamen. Dies führt dazu, dass jedes LF-Zeichen (`n) als einzelnes LF-Zeichen geschrieben wird und nicht wie in Windows üblich als CR-LF-Paar (`r`n). Zum Beispiel: *C:\Meine Unix-Datei.txt.

Wenn die Datei nicht bereits offen ist (weil sie sich in einer dateilesenden Schleife befindet), wird die Zeilenumbruchübersetzung automatisch deaktiviert, wenn Text CR-LF-Paare (`r`n) enthält. Mit anderen Worten, die im vorherigen Absatz beschriebene Sternchenoption wird automatisch aktiviert. Die Angabe des Sternchens, wenn Text `r`n enthält, erhöht jedoch die Performanz, da das Programm nicht nach `r`n in Text suchen muss.

Standardausgabe (stdout): Geben Sie ein Sternchen (*) für DateiName an, um Text zur Standardausgabe (stdout) zu senden. Diese Art von Text kann auf eine Datei umgeleitet, an eine EXE-Datei weitergeleitet oder von umfangreichen Texteditoren abgefangen werden. Zum Beispiel könnte man folgendes in der Eingabeaufforderung schreiben:

"%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "Mein Skript.ahk" >"Fehlerprotokoll.txt"

Allerdings wird ein zur Standardausgabe gesendeter Text nicht in der Eingabeaufforderung angezeigt, von der aus die Zeile gestartet wurde. Dies kann umgangen werden, indem 1) [v1.1.33+] das Skript mit der Ahk2Exe-ConsoleApp-Direktive kompiliert wird, oder 2) die Ausgabe des Skripts via Piping an einen anderen Befehl oder an ein anderes Programm weitergeleitet wird. Zum Beispiel:

"%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "Mein Skript.ahk" |more
For /F "tokens=*" %L in ('""%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "Mein Skript.ahk""') do @Echo %L

[v1.1.20+]: Geben Sie zwei Sternchen (**) für DateiName an, um Text zur Standardfehlerausgabe (stderr) zu senden.

Kodierung [AHK_L 42+]

Wenn leer oder weggelassen, wird die Standardkodierung verwendet (definiert durch FileEncoding oder standardmäßig CP0). Andernfalls geben Sie die Kodierung oder Codepage an, z.B. UTF-8, UTF-16 oder CP936.

Wenn die Datei eine UTF-8- oder UTF-16-Byte-Order-Markierung (BOM) enthält, werden dieser Parameter und die Standardkodierung ignoriert.

Fehlerbehandlung

[v1.1.04+]: Dieser Befehl ist in der Lage, bei Misserfolg eine Ausnahme auszulösen. Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel wird bei Misserfolg auf 1 und bei Erfolg auf 0 gesetzt.

A_LastError wird auf das Ergebnis der Systemfunktion GetLastError() gesetzt.

Bemerkungen

Um eine existierende Datei zu überschreiben, löschen Sie diese mit FileDelete, bevor Sie FileAppend verwenden.

Die Zieldatei wird automatisch geschlossen, nachdem der Text angefügt wurde (außer wenn FileAppend im Einzelparameter-Modus innerhalb einer dateilesenden/-schreibenden Schleife verwendet wird).

[AHK_L 42+]: FileOpen() im Anfügemodus bietet mehr Kontrolle als FileAppend und lässt die Datei geöffnet, anstatt sie jedes Mal neu zu öffnen und zu schließen. Sobald eine Datei im Anfügemodus geöffnet ist, kann mit File.Write(Zeichenkette) die Zeichenkette angefügt werden. File-Objekte unterstützen auch binäre Ein-/Ausgabe via RawWrite/RawRead oder WriteNum/ReadNum, während FileAppend nur Text unterstützt.

FileEncoding, FileOpen() / File-Objekt, FileRead, dateilesende Schleife, FileReadLine, IniWrite, FileDelete, OutputDebug, Fortsetzungsbereiche

Beispiele

Erstellt eine Datei, falls erforderlich, und fügt eine Zeile an.

FileAppend, Eine weitere Zeile.`n, C:\Meine Dokumente\Test.txt

Verwenden Sie einen Fortsetzungsbereich, um die Übersichtlichkeit und Wartbarkeit des Skripts zu verbessern.

FileAppend,
(
Eine Textzeile.
Standardmäßig wird der Zeilenumbruch (Enter) zwischen der vorherigen und dieser Zeile in die Datei geschrieben.
    Diese Zeile ist mit einem Tabulatorzeichen eingerückt; standardmäßig wird es auch in die Datei geschrieben.
Variablenreferenzen wie %Var% werden standardmäßig aufgelöst.
), C:\Meine Datei.txt

Zeigt, wie das FTP-Hochladen mit dem systeminternen FTP-Befehl automatisiert werden kann. Dieses Skript wurde in Windows XP getestet.

FTPBefehlDatei := A_ScriptDir "\FTPBefehle.txt"
FTPLogDatei := A_ScriptDir "\FTPLog.txt"
FileDelete %FTPBefehlDatei%  ; Im Falle einer vorzeitig terminierten Ausführung.

FileAppend,  ; Das Komma ist in diesem Fall erforderlich.
(
open host.domain.com
username
password
binary
cd htdocs
put %VarMitZieldateiname%
delete EineAndereDatei.htm
rename AlteDateiName.htm NeueDateiName.htm
ls -l
quit
), %FTPBefehlDatei%

RunWait %ComSpec% /c ftp.exe -s:"%FTPBefehlDatei%" >"%FTPLogDatei%"
FileDelete %FTPBefehlDatei%  ; Aus Sicherheitsgründen löschen.
Run %FTPLogDatei%  ; Protokoll zur Überprüfung anzeigen.