Auf diesem Zettel übst du den Umgang mit Dateien und Ordnern: Existenz prüfen, anlegen, Inhalte schreiben und lesen, kopieren, verschieben, umbenennen und löschen — plus das Auslesen von Datei-Properties wie Name und Größe.
Test-Path "C:\Pfad" liefert $true oder $false — erst prüfen, dann handeln.New-Item -ItemType Directory erstellt einen Ordner, -ItemType File eine Datei. -Force verhindert einen Fehler, wenn das Ziel schon existiert.Set-Content ÜBERSCHREIBT den kompletten Inhalt einer Datei — Add-Content hängt an.Get-Content liefert ein Array von Zeilen; mit -Raw bekommst du stattdessen EINEN einzigen String.Copy-Item (Ordner: -Recurse), Move-Item, Rename-Item -NewName, Remove-Item — Achtung: Remove-Item löscht ENDGÜLTIG, es gibt keinen Papierkorb!Get-ChildItem -Filter "*.txt" -Recurse -File filtert nach Muster, steigt in Unterordner hinab und liefert nur Dateien (-Directory = nur Ordner)..Name, .BaseName, .Extension, .Length (Bytes), .LastWriteTime. Bytes → KB: [math]::Round($f.Length / 1KB, 1) — 1KB = 1024.$true oder $false zurück, je nachdem ob der Pfad existiert?if ( "C:\Backup") { Write-Host "Ordner vorhanden" }
Test-Path prüft, ob eine Datei oder ein Ordner existiert, und liefert $true bzw. $false. Weil das Ergebnis ein Bool ist, passt es direkt in ein if — so prüfst du sicher, BEVOR du liest, kopierst oder löschst.
Set-Content -Path "log.txt" -Value "Neu"
log.txt enthält bereits mehrere Zeilen Text. Was passiert bei diesem Befehl?Set-Content ERSETZT den kompletten Inhalt — ohne Rückfrage. Zum Anhängen nimmst du Add-Content. Diesen Unterschied zu verwechseln ist die klassische Ursache für versehentlich gelöschte Log-Daten.
Alle vier folgen dem Verb-Item-Muster: Copy- kopiert (Ordner brauchen -Recurse), Move- verschiebt, Rename- benennt um, Remove- löscht. Merke: Remove-Item löscht SOFORT und ENDGÜLTIG — nichts landet im Papierkorb.
Get-Content den kompletten Inhalt als EINEN einzigen String liefert (statt als Zeilen-Array)?$text = Get-Content -Path "notes.txt" $text.Length # Anzahl ZEICHEN, nicht Zeilen
Ohne -Raw liefert Get-Content ein Array von Zeilen — praktisch für Schleifen. Mit -Raw bekommst du einen einzigen String inklusive aller Zeilenumbrüche, z. B. zum Suchen und Ersetzen im ganzen Text. Deshalb zählt .Length hier Zeichen statt Zeilen.
Set-Content -Path "log.txt" -Value "Alpha" Set-Content -Path "log.txt" -Value "Beta" Add-Content -Path "log.txt" -Value "Gamma" Write-Host (Get-Content -Path "log.txt").Count
Write-Host ...) aus?Das zweite Set-Content überschreibt Alpha komplett — übrig bleibt nur Beta. Add-Content hängt dann Gamma an. Die Datei hat also 2 Zeilen (Beta, Gamma), Get-Content liefert ein Array mit 2 Elementen und .Count ergibt 2.
Get-ChildItem ALLE Dateien (keine Ordner) finden, auch in sämtlichen Unterordnern. Welche zwei Parameter brauchst du? Kreuze zwei an.-File beschränkt das Ergebnis auf Dateien (-Directory wäre genau das Gegenteil: nur Ordner). -Recurse steigt in alle Unterordner hinab. -Force zeigt nur versteckte Elemente zusätzlich an, und -Raw gehört zu Get-Content, nicht zu Get-ChildItem.
# Die Datei existiert: $f = Get-Item "C:\Data\report.txt" Write-Host "$($f.BaseName)|$($f.Extension)"
.BaseName ist der Dateiname OHNE Endung (report), .Extension ist die Endung INKLUSIVE Punkt (.txt). .Name wäre report.txt. Und weil Properties in doppelten Anführungszeichen nicht direkt aufgelöst werden, braucht es die Subexpression $(...).
$length = 2560 $kb = [math]::Round($length / 1KB, 1) Write-Host "$kb KB"
1KB ist eine eingebaute PowerShell-Konstante für 1024 Bytes. 2560 / 1024 = 2.5, und [math]::Round(..., 1) rundet auf eine Nachkommastelle. PowerShell gibt Zahlen mit Punkt als Dezimaltrenner aus, also erscheint 2.5 KB.
New-Item den Ordner C:\Temp\TestFolder an (nutze -Force, falls es ihn schon gibt) und erstelle darin mit Set-Content die Datei hello.txt mit dem Inhalt Zeile 1.Add-Content zwei weitere Zeilen an (Zeile 2 und Zeile 3) und gib die Datei anschließend mit Get-Content aus.*.txt-Dateien im Ordner auf: pro Datei den Namen und die Größe in KB, gerundet auf 1 Nachkommastelle.# 1) Ordner anlegen + Datei mit erster Zeile erstellen New-Item -ItemType Directory -Path "C:\Temp\TestFolder" -Force Set-Content -Path "C:\Temp\TestFolder\hello.txt" -Value "Zeile 1" # 2) Zwei Zeilen anhaengen und Datei ausgeben Add-Content -Path "C:\Temp\TestFolder\hello.txt" -Value "Zeile 2" Add-Content -Path "C:\Temp\TestFolder\hello.txt" -Value "Zeile 3" Get-Content -Path "C:\Temp\TestFolder\hello.txt" # 3) Alle *.txt mit Name + Groesse in KB listen foreach ($file in Get-ChildItem -Path "C:\Temp\TestFolder" -Filter "*.txt" -File) { $kb = [math]::Round($file.Length / 1KB, 1) Write-Host "$($file.Name) - $kb KB" }
Set-Content legt die Datei automatisch an, wenn sie noch nicht existiert — ein separates New-Item -ItemType File ist hier also nicht nötig. Add-Content hängt an, statt zu überschreiben. In Schritt 3 filtert -Filter "*.txt" schnell nach Endung, -File schließt Ordner aus, und .Length liefert Bytes, die du mit 1KB (= 1024) in Kilobytes umrechnest.