Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 从FileInfo对象获取目录名_Powershell - Fatal编程技术网

Powershell 从FileInfo对象获取目录名

Powershell 从FileInfo对象获取目录名,powershell,Powershell,我正在寻找一个可执行位置,并使用以下命令: PS C:\>dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue |选择-第一个1-属性目录 它返回: 目录 --------- C:\ProgramFiles(x86)\OpenSource\Notepad++ 如何获取字符串“C:\ProgramFiles(x86)\OpenSource\Notepad++”? 我尝试了很多不同的命令,但都不起作用我将一步一步地研究这个问

我正在寻找一个可执行位置,并使用以下命令:

PS C:\>dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue |选择-第一个1-属性目录
它返回:

目录
---------
C:\ProgramFiles(x86)\OpenSource\Notepad++
如何获取字符串“C:\ProgramFiles(x86)\OpenSource\Notepad++”? 我尝试了很多不同的命令,但都不起作用

我将一步一步地研究这个问题,答案的第一部分末尾给出了一行解决方案


您案例的具体解决方案

现在,您正在接收一个对象。一个简单的解决方案是使用
ToString()
方法将对象存储在变量中,并以字符串形式访问目录路径

$a=dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue |选择-第一个1-属性目录
$a.Directory.ToString()
在这种情况下,您还可以缩短
dir
调用,如下面的代码段所示

$a=dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue |选择-第一个1
$a.Directory.ToString()
或者使用DirectoryName属性,如在下面的示例中

$a=dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue |选择-第一个1
$a.DirectoryName
最后,你也可以在一行中完成

dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue | select-first 1 |%{$\目录.ToString()}
或者,再次使用DirectoryName属性

dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue | select-first 1 |%{$|.DirectoryName}

上面的所有解决方案都将以字符串形式返回路径,在您的系统上,路径将如下所示

C:\ProgramFiles(x86)\OpenSource\Notepad++

解决方案的一般方法

如果要访问PowerShell中对象的任何属性,首先需要知道可用属性。只需通过管道将对象传输到
Get Member
Cmdlet,PowerShell就会打印TypeName和一个属性名称、类型和定义表

dir-recurse-filter“notepad++.exe”-ErrorAction SilentlyContinue | select-first 1 | Get成员
快速的网络调查将提供更多关于对象类型的信息

知道要使用哪个属性后,可以使用以下方法之一访问该属性

  • 存储返回的对象(例如作为
    a
    )并使用
    $a.PropertyName
  • 通过管道将对象传输到
    %{$\u.PropertyName}
  • 使用
    -ExpandProperty PropertyName
    ,就像培根一样
  • 只需使用最适合剩余代码的样式


    -Property
    -ExpandProperty
    之间的差异

    -Property
    将为您提供一个正好包含此属性的对象


    -ExpandProperty
    将返回属性本身。

    使用
    选择对象
    -ExpandProperty
    参数,并要求使用
    目录名
    属性而不是
    目录
    属性:

    dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 -ExpandProperty DirectoryName