Test-Path în PowerShell

Fișiere și foldere Windows PowerShell 1.0

Verifică dacă o cale există și întoarce True sau False; poate cere să fie fișier sau folder și să fie mai nouă decât o dată.

Sintaxă
Test-Path [-Path] <string[]> [-PathType {Any | Container | Leaf}] [-IsValid] [-NewerThan <datetime>] [-OlderThan <datetime>]

Ce face Test-Path

Test-Path întoarce True dacă toate elementele căii există și False dacă lipsește vreunul. Este verificarea standard înainte de a crea, citi sau șterge un fișier, de obicei într-un if.

-PathType Leaf cere ca ultimul element să fie un fișier, -PathType Container un folder. -IsValid verifică doar dacă sintaxa căii e corectă, nu și dacă există. Un șir format doar din spații întoarce False, iar $null produce o eroare.

-NewerThan și -OlderThan compară data ultimei modificări. Din PowerShell 7.5 pot fi folosite împreună (un interval), cu orice -PathType și pentru foldere; în versiunile mai vechi, în aceste cazuri erau ignorate.

Parametri

Parametru Descriere
-Path Calea de verificat; acceptă wildcard-uri și intrare din pipeline.
-PathType Any, Container (folder) sau Leaf (fișier). Alias -Type.
-IsValid Verifică doar sintaxa căii, indiferent dacă există.
-NewerThan / -OlderThan Elementul trebuie să fie modificat după / înainte de data dată (doar în sistemul de fișiere).
-Include / -Exclude / -Filter Verifică doar elementele care se potrivesc tiparului.
-LiteralPath Calea folosită exact cum e scrisă, fără wildcard-uri.

Ce returnează

Un Boolean: True sau False.

Exemple

Exemplul 1: Există sau nu?

Primul folder există, al doilea nu.

Test-Path -Path C:\Proiecte\facturi
Test-Path -Path C:\Proiecte\contracte

Ieșire în terminal

True
False

Exemplul 2: Fișier sau folder

C:\Proiecte\facturi este un folder, deci Leaf întoarce False și Container întoarce True.

Test-Path -Path C:\Proiecte\facturi -PathType Leaf
Test-Path -Path C:\Proiecte\facturi -PathType Container

Ieșire în terminal

False
True

Exemplul 3: Creează folderul doar dacă lipsește

Un tipar des întâlnit în scripturi: verifici, creezi dacă e nevoie, și ascunzi ieșirea lui New-Item cu Out-Null.

$dosar = 'C:\Proiecte\facturi\2027'
if (-not (Test-Path -Path $dosar)) {
    New-Item -Path $dosar -ItemType Directory | Out-Null
    Write-Output "Am creat $dosar"
} else {
    Write-Output "$dosar există deja"
}

Ieșire în terminal

Am creat C:\Proiecte\facturi\2027

Greșeli frecvente

  • Între Test-Path și operația următoare fișierul poate apărea sau dispărea (de exemplu alt proces îl șterge). Pentru operații critice, tratează și erorile cu try / catch și -ErrorAction Stop.
  • Test-Path $cale cu $cale egal cu $null nu întoarce False, ci o eroare. Verifică întâi variabila (if ($cale -and (Test-Path $cale))).
  • Un nume cu [ ] poate întoarce False deși fișierul există, pentru că parantezele sunt wildcard-uri. Folosește -LiteralPath.

Comenzi înrudite

  • New-Item: Creează un fișier, un folder sau un link; poate pune și conținut inițial în fișierul nou.
  • Remove-Item: Șterge fișiere și foldere (și alte elemente, ca chei de registry); ștergerea este definitivă, nu în Coșul de reciclare.
  • if / elseif / else: if rulează un bloc de cod doar când condiția e adevărată; elseif și else tratează celelalte cazuri, iar ?: (din PowerShell 7.0) e forma scurtă.
  • try / catch / finally: try/catch prinde erorile care opresc o comandă, iar finally rulează mereu; pentru erorile obișnuite ale cmdlet-urilor pui -ErrorAction Stop.
  • Get-Date: Get-Date întoarce data și ora curentă (sau una dată) ca obiect [datetime], pe care îl formatezi cu -Format și îl calculezi cu .AddDays().