2009-03-11 14 views
11

Teraz zaczynam korzystać z PowerShell i po długim czasie używać powłok uniksowych i chcę wiedzieć, jak sprawdzić istnienie pliku lub katalogu.Sposób korzystania z obiektu FileInfo z Powershell

W Powershell dlaczego Exist zwraca wartość false w następującym wyrażeniu?

PS H:\> ([System.IO.FileInfo]"C:\").Exists 
False 

I czy jest lepszy sposób, aby sprawdzić, czy plik jest katalogiem niż:

PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d") 
True 

Odpowiedz

20

użycia 'Test-Path' zamiast System.IO.FileInfo.Exists

PS C:\Users\m> test-path 'C:\' 
True 

można użyć PSIsContainer w celu ustalenia, czy plik jest katalogiem:

PS C:\Users\m> (get-item 'c:\').PSIsContainer 
True 

PS C:\Users\m> (get-item 'c:\windows\system32\notepad.exe').PSIsContainer 
False 
7
Help Test-Path 

Test-Path Determines whether all elements of a path exist 

Test-Path -PathType Leaf C:\test.txt 
Test-Path -PathType Container C:\ 
Test-Path C:\ 
10

Oprócz Michael's answer można również testować przy użyciu:

PS H:> ([System.IO.DirectoryInfo]"C:\").Exists 
True 
7

PowerShell dlaczego istnieje return false w poniższej wypowiedzi?

 
    PS H:> ([System.IO.FileInfo]"C:\").Exists 

Ponieważ nie ma pliku o nazwie "C: \" - jest to katalog.

+0

Przywykłem do Unix gdzie katalogiem plik jest zbyt. – BeWarned

1

Możesz użyć Get-Item, aby pozwolić PowerShell wybrać między FileInfo i DirectoryInfo. Spowoduje to zgłoszenie wyjątku, jeśli ścieżka nie rozwiąże problemu.

PS> $(Get-Item "C:\").GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  DirectoryInfo       System.IO.FileSystemInfo 

użyłbym tylko to ponad Test-Path jeśli trzeba będzie wpis DirectoryInfo lub FileInfo jeśli ona istnieje.

0

Obie te oceny do prawdziwej

$(Get-Item "C:\").GetType() -eq [System.IO.DirectoryInfo] 
$(Get-Item "C:\test.txt").GetType() -eq [System.IO.FileInfo] 
Powiązane problemy