代码之家  ›  专栏  ›  技术社区  ›  Eric Schoonover thSoft

powershell fileinfo在子目录中输出文件

  •  5
  • Eric Schoonover thSoft  · 技术社区  · 14 年前

    为什么在这种情况下输出不是 c:\source\temp\test.txt ?

    PS C:\source\temp> (New-Object IO.FileInfo .\test.txt).FullName
    c:\source\test.txt
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Josh    14 年前

    啊,这经常让人在大地狱里被绊倒。尽管powershell有当前目录的概念,但这与进程的当前目录不同。原因是,windows进程只能有一个当前目录,而powershell进程可能有多个运行空间/管道,每个运行空间/管道都有自己的当前目录,powershell当前目录甚至可能不是文件位置。

    采用相对路径的.NET方法将根据进程的当前目录进行解析。所以为了安全起见,在调用.NET方法时,应该使用完全解析的路径。你可以:

    PS> (New-Object IO.FileInfo "$PWD\test.txt").FullName
    

    $pwd在字符串内部展开(因为有双引号),它是一个自动变量,始终返回当前工作目录。它实际上返回一个pathinfo对象,因为它嵌入的字符串可能并不总是绝对的物理路径。如果使用psdrives(例如,我有一个temp:\驱动器映射到我的temp目录),则需要更明确。

    PS> (New-Object IO.FileInfo "$($PWD.ProviderPath)\test.txt").FullName
    

    powershell大师可能有更简洁的语法。上面的东西的确很难看。