最初,我想以交互方式:
- 找到可执行文件的目录(在有限的情况下使用
where
) - 在资源管理器中运行可执行文件的父目录
我在 Windows 中尝试了以下操作cmd
:
可以从 cmd
where
命令读取 stdoutwhere pip 1> myfile.txt
然而我真正想要的是
where pip | cd.. | explorer
where pip
如果可执行文件位于系统环境变量中,则返回包含可执行文件路径的字符串%PATH%
。但是,我无法根据返回的字符串找出如何到达父目录where
。
我在 Power Shell 中找到的解决方案是这样的:
$a = Get-Item((gcm pip.exe).Path); Split-Path -Path $a -Parent | ii
有没有更紧凑这个问题的解决方案?
答案1
这 …
$a = Get-Item((gcm pip.exe).Path); Split-Path -Path $a -Parent | ii
.. 实际上是两个独立的命令。将它们放在一行上确实可以使它成为一行,这似乎是您的用例。
您可以使用 Get-Member cmdlet 来具体查找可以使用的内容。
Get-Item((gcm notepad.exe).Path) | Get-Member
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
...
PSChildName NoteProperty string PSChildName=notepad.exe
PSDrive NoteProperty PSDriveInfo PSDrive=C
PSIsContainer NoteProperty bool PSIsContainer=False
PSParentPath NoteProperty string PSParentPath=Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32
PSPath NoteProperty string PSPath=Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\notepad.exe
..
Directory Property System.IO.DirectoryInfo Directory {get;}
DirectoryName Property string DirectoryName {get;}
...
FullName Property string FullName {get;}
...
这当然会让你来到这里:
(Get-Item((gcm notepad.exe).Path)).Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/19/2018 1:33 PM system32
(Get-Item((gcm notepad.exe).Path)).DirectoryName
C:\Windows\system32
(Get-Item((gcm notepad.exe).Path)).FullName
C:\Windows\system32\notepad.exe
因此 ...
ii (gi((gcm notepad.exe).Path)).FullName
值得注意的是,这一切都很酷,都是用于交互式的东西,但在生产脚本中的最佳实践,应该真正避免使用别名和简称,因为它使脚本难以理解和维护。