Batch Inhalt von Textdatei löschen

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.782
hi, gibt es einen Befehl, womit ich den Inhalt einer Textdatei komplett löschen kann?

Ich möchte diesen durch einen neuen Inhalt ersetzen.
 
Stimmt, geht ja auch. Aber hier kommt der mit dem Pfad nicht klar(dieser soll relativ zur Batch befindlich angegben sein): "Das System kann den angegebenen Pfad nicht finden."

Also test.bat, befindet sich hier: D:\Testordner

set PFAD=\Ordner1\Ordner2
set DATEI=test.txt
set INHALT=Name1
echo %INHALT% > %PFAD%%DATEI%

Hier soll die test.txt erstellt werden: D:\Testornder\Ordner1\Ordner2
 
Schritt 1: Dateiname auslesen
Schritt 2: Datei löschen
Schritt 3: Leere Datei mit dem gleichen Name anlegen

ist alles in Batch programmierbar und kannst du auch das für alle entsprechenden Dateien in dem Verzeichniss mit einer Schleife machen

Edit:

ja ist auch klar, der Pfad müss vollständig sein

also C:\Ordner1\Ordner2

außerdem %PFAD%%DATEI% muss dann so stehen %PFAD%\%DATEI%
 
  • Gefällt mir
Reaktionen: o0Julia0o
Jo, das geht ja auch einfacher mit Löschen und neue Textdatei anlegen mit neuem Inhalt. Zumal ich den Textdateinamen kenne.

So funktionier es nun:

set PFAD=Ordner1\Ordner2\
set DATEI=test.txt
set INHALT=Name1
echo %INHALT% > %PFAD%%DATEI%

Also vor Ordner1 kommt kein "\". Und am Ende von Ordner2 kommt ein "\". Weil ja unten beim echo kein "\" zwischen Pfad und Datei steht.
 
Zuletzt bearbeitet:
set PFAD=T:\Temp
set DATEI=test.txt
set INHALT=Name1
echo %INHALT% > %PFAD%\%DATEI%

funktioniert bei mir
 
  • Gefällt mir
Reaktionen: o0Julia0o
Aber was ist, wenn der Pfad eine Leerstelle enthält, dann geht so:

set PFAD="Ordner1\Ordner 2\"
set DATEI=test.txt
set INHALT=Name1
echo %INHALT% > %PFAD%%DATEI%
 
Batchprogrammierung Grundkurs: " sind dein Freund in dem Fall ;)

o0Julia0o schrieb:
Und am Ende von Ordner2 kommt ein "\". Weil ja unten beim echo kein "\" zwischen Pfad und Datei steht.

Das macht man so nicht, da man dieses, wenn man mal einen Pfad ausließt, auch nicht erhält in der Ausgabe (zumindest soweit ich noch weiß). Daher lieber zwischen den Variablen unterbringen
 
  • Gefällt mir
Reaktionen: o0Julia0o
o0Julia0o schrieb:
hi, gibt es einen Befehl, womit ich den Inhalt einer Textdatei komplett löschen kann?
Nach kurzem googeln aus reiner Neugier :D

set/p=<nul>"D:\Verzeichnis mit Leerstellen\echo.txt"

Pfad halt anpassen usw.

Aber um den Inhalt einer Textdatei durch etwas anderes zu ersetzen reicht doch ein
echo blabla >xyz.txt

Warum muss die Datei überhaupt vorher gelöscht werden?
 
Fusionator schrieb:
Aber um den Inhalt einer Textdatei durch etwas anderes zu ersetzen reicht doch ein
echo blabla >xyz.txt

nope, das hängt nur den inhalt an, löscht nicht den vorhandenen inhalt.
 
> datei.txt ersetzt den Inhalt der Datei
>> datei.txt hängt an den Inhalt der Datei an

Eine komplett leere (0 Byte) Datei erzeugt man in Batch zB mit

echo. 2>out.txt

Damit wird durch echo. eine Leerzeile erzeugt, aber wenn man diese direkt mit > in out.txt schieben würde, entstünde eben besagte Leerzeile. Durch 2>out.txt bedient man sich eines Redirects des stderr Streams, also der Fehlerausgabe. Da diese bei echo. jedoch komplett leer ist, wird eben dies in out.txt geschrieben und es entsteht eine 0-Byte-Datei.

Das aber nur der Vollständigkeit halber. @o0Julia0o möchte die Datei aber nicht löschen oder eine leere Datei erzeugen, sondern ihren Inhalt überschreiben oder die Datei mit eben diesem Inhalt neu erzeugen. Daher ist echo bla>out.txt vollkommen ausreichend. Just in case: Lässt man ein Leerzeichen zwischen bla und > wird dieses auch in die Datei geschrieben.
o0Julia0o schrieb:
echo %INHALT% > %PFAD%%DATEI%
Dieser Befehl führt also zu einer neuen/überschriebenen Datei mit dem Inhalt der Variablen INHALT + ein Leerzeichen am Ende ;)
 
  • Gefällt mir
Reaktionen: andy_m4, Iqra und s1ave77
PS wäre Set-Content -Value '' -Path pfad/zur/datei.txt .
-Value $null oder -Value @() sollten beide auch gehen, aber habe da auch schon ausnahmen geworfen bekommen, also nicht sicher. '' ist auch etwas kürzer und leistet dasselbe.
Wenn man das in PS öfter braucht kann man natürlich auch einfach eine Funktion erfinden Namens touch - oder touch-object mit Alias touch --- welche dasselbe tut und dann hat man dasselbe Verhalten wie unter unixoiden Systemen.
 
Zurück
Oben