Ich versuche, eine txt-Datei auf einem Windows-Server zu lesen, aber es hat Probleme beim Lesen aus einem Ordner, wenn dieser Klammern oder andere Sonderzeichen enthält. Um dies zu beheben, muss ich die Klammern mit einem Backslash escapen, aber aus irgendeinem Grund ersetzt n8n den Backslash durch einen Schrägstrich. Weiß jemand, wie man das beheben kann?
Welche Fehlermeldung erhalten Sie (falls vorhanden)?
Wie Sie in der Eingabe sehen können, habe ich Klammern mit einem Backslash escaped, aber in der Ausgabe sehen Sie, dass die Klammern durch Schrägstrich ersetzt werden
Bitte teilen Sie Ihren Workflow
Teilen Sie die von dem letzten Knoten zurückgegebene Ausgabe
Informationen zu Ihrem n8n-Setup
n8n-Version: 2.19.5
Datenbank (Standard: SQLite): Standard
n8n-EXECUTIONS_PROCESS-Einstellung (Standard: own, main): Standard
n8n wird ausgeführt über (Docker, npm, n8n cloud, Desktop-App): npm
@Ruriko
Eine einfache Lösung besteht darin, die Datei in einen Pfad ohne Klammern oder Sonderzeichen zu verschieben oder zu kopieren, z. B. C:\n8n-files\input.txt, und n8n von diesem bereinigten Pfad aus lesen zu lassen.
Der Grund dafür ist, dass n8n den Pfad als String verarbeitet und Slashes normalisiert. Dies ist eine bekannte Eigenheit beim Ausführen von n8n unter Windows. Das Verschieben der Datei in einen anderen Ordner würde helfen. Hier sind aber einige Alternativen, die du versuchen könntest:
-Verwende doppelte Backslashes zum Escapen, z. B. “C:\\folder (with brackets)\\file.txt”. Der erste Backslash dient dem Escapen, wodurch der zweite die String-Verarbeitung übersteht.
-Gib den Pfad in einem Ausdruck mit ‘$json’ oder einem Set-Node ein, um ihn zu konstruieren, anstatt ihn direkt in das Feld zu tippen. Dies kann manchmal die Normalisierung umgehen.
-Falls du selbst hostest, kann die Verwendung eines UNC-Pfads (‘\\\\server\\share\\folder’) das Problem manchmal umgehen.
Mit welchem Node liest du die Datei? Das hilft mir, das Problem einzugrenzen.
In meinem Workflow habe ich den Pfad bereits in einen Ausdruck eingefügt und es hat nicht funktioniert. Ich verwende den Read/Write-Node, um die Datei zu lesen. Das Problem ist, dass es in Version 1.x funktioniert hat, aber beim Wechsel zu 2.x nicht mehr funktioniert, weil es Backslashes durch Schrägstriche ersetzt.
@Ruriko dein Edit Fields1-Ausdruck ruft zuerst .replaceAll(‘\\’,‘/’) auf — das konvertierst du selbst, nicht n8n. Lasse die replace weg und escape einfach die Klammern, oder verwende durchgehend forward slashes, da readWriteFile sie unter Windows akzeptiert.
Hey @Ruriko, cool, dass du den Workflow-Screenshot geteilt hast – das macht es viel leichter zu verstehen!
Das ist ein bekanntes Verhalten beim Erstellen von Pfaden in n8n-Ausdrücken auf Windows. Die Expression-Engine behandelt Backslash als Escape-Zeichen, daher wird \[ zu /[ normalisiert oder entfernt.
Die sauberste Lösung ist, den Pfad in einem Code-Node zu erstellen (nicht in einem Ausdruck), wo du volle JavaScript-Kontrolle hast:
const folderName = $('Edit Fields').item.json.folderName; // deine Eingabe
const safePath = 'C:\\Users\\Admin\\Desktop\\' + folderName;
// oder verwende String.raw, wenn der Ordnername aus der Eingabe kommt:
const filePath = String.raw`C:\Users\Admin\Desktop\` + folderName;
return [{ json: { filePath } }];
Verwende dann {{ $json.filePath }} in deinem Read/Write Files Node.
Alternativ kannst du, wenn du den Ausdrucksansatz beibehalten möchtest, Schrägstriche innerhalb des Ausdrucks zurück zu Backslashes ersetzen:
{{ $json.path.replace(/\//g, '\\') }}
Hat @achamm’s Workflow-Beispiel bei dir funktioniert? Wenn du teilen kannst, wie dein aktueller Pfadwert nach dem Edit Fields Node aussieht, können wir genau herausfinden, wo die Schrägstrichersetzung stattfindet.
Hi @Ruriko
Danke, dass du dieses sehr interessante Windows-Pfad-Problem geteilt hast.
Etwas, das hilfreich sein kann, ist es, den finalen Pfad in einem Code-Node mit path.join() zu erstellen, statt die Zeichenkette in Expressions manuell zu escapen. Da der n8n Code Node auf der Node.js-Laufzeit ausgeführt wird: Dies kann eine saubere Möglichkeit sein, um die Trennzeichen zu normalisieren und die Pfadkonstruktion deterministisch zu halten.
Fügen Sie direkt im Feld “File(s) Selector” einen Backslash vor jeder eckigen Klammer ein:
\[A+B\]/file.txt
C:/Users/Administrator/Desktop/Data/Test \[A+B\]/file.txt
oder Verwenden Sie .replaceAll() in einem Ausdruck
Wenn der Pfad aus einem dynamischen Ausdruck stammt (z. B. von einem vorherigen Knoten), verwenden Sie .replaceAll(), um die Sonderzeichen programmgesteuert zu maskieren