我正在寻找可执行位置,我使用以下命令:
PS C:\> dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 -Property Directory
它返回:
Directory
---------
C:\Program Files (x86)\OpenSource\Notepad++
如何获取字符串“C:\ Program Files(x86)\ OpenSource \ Notepad ++”? 我尝试了很多不同的命令但没有一个工作
答案 0 :(得分:2)
我将逐步接受这个问题,在我的答案的第一部分结尾处提供单行解决方案。
针对您案例的具体解决方案
现在,您正在接收一个对象。一个简单的解决方案是将对象存储在变量中,并使用ToString()
方法以字符串形式访问目录的路径。
$a = dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 -Property Directory
$a.Directory.ToString()
在这种情况下,您还可以缩短dir
来电,如下面的代码段所示。
$a = dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1
$a.Directory.ToString()
或者使用DirectoryName属性,就像在Bacon Bits中一样。
$a = dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1
$a.DirectoryName
最后,你也可以在一行中完成。
dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 | % { $_.Directory.ToString() }
或者,再次使用DirectoryName属性。
dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 | % { $_.DirectoryName }
上面的所有解决方案都会在您的系统上以字符串的形式返回路径。
C:\Program Files (x86)\OpenSource\Notepad++
解决方案的一般方法
如果要在PowerShell中访问对象的任何属性,则需要首先了解可用的属性。只需将对象传递给Get-Member
Cmdlet,PowerShell就会打印出TypeName以及属性名称,类型和定义表。
dir -recurse -filter "notepad++.exe" -ErrorAction SilentlyContinue | select -first 1 | Get-Member
快速网络研究可以提供有关对象类型的更多信息。
当您知道要使用哪个属性时,可以使用以下方法之一访问它。
a
)并使用$a.PropertyName
% { $_.PropertyName }
-ExpandProperty PropertyName
,就像Bacon Bits一样。只需使用最适合您剩余代码的样式。
-Property
和-ExpandProperty
之间的差异
-Property
将为您提供一个对象,其中包含此属性。
-ExpandProperty
将返回该属性。
答案 1 :(得分:1)
使用-ExpandProperty
的{{1}}参数,并要求Select-Object
属性而不是DirectoryName
属性:
Directory