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