代码之家  ›  专栏  ›  技术社区  ›  BeWarned

如何使用PowerShell中的FileInfo对象

  •  10
  • BeWarned  · 技术社区  · 15 年前

    我现在开始使用PowerShell,在使用了大量的Unix shell之后,我想知道如何检查文件或目录的存在。

    在PowerShell中为什么 Exist 在以下表达式中返回false?

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

    是否有比以下更好的方法来检查文件是否为目录:

    PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
    True
    
    6 回复  |  直到 7 年前
        1
  •  22
  •   Michael    15 年前

    使用“test path”而不是system.io.fileinfo.exists。

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

    可以使用psisContainer确定文件是否为目录:

    PS C:\Users\m> (get-item 'c:\').PSIsContainer
    True
    
    PS C:\Users\m> (get-item 'c:\windows\system32\notepad.exe').PSIsContainer
    False
    
        2
  •  10
  •   Community WizardZ    7 年前

    除了 Michael's answer 您也可以使用以下方法进行测试:

    PS H:> ([System.IO.DirectoryInfo]"C:\").Exists
    True
    
        3
  •  9
  •   Jay Bazuzi Buck Hodges    15 年前

    在PowerShell中,为什么exist在以下表达式中返回false?

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

    因为没有名为“c:\”的文件-它是一个目录。

        4
  •  8
  •   CharlesB Craig McQueen    11 年前
    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:\
    
        5
  •  2
  •   jdmichal    13 年前

    你可以使用 Get-Item 允许PowerShell在 FileInfo DirectoryInfo . 如果路径没有解析到某个位置,它将引发异常。

    PS> $(Get-Item "C:\").GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     DirectoryInfo                            System.IO.FileSystemInfo
    

    我只会用这个 Test-Path 如果你需要 Directory信息 文件信息 条目(如果存在)。

        6
  •  2
  •   Pang Lokesh Desai    7 年前

    这两个都是真的

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